2013-10-03 4 views
1

값을 가져 와서 linq 문을 통해 만든 모든 익명 형식의 BatchId에 표시하려고합니다. 여기 익명 형식의 변수를 참조 할 수 없습니다.

코드입니다 :

var batchId = context.Request["batchid"]; 
    using (var db = new StarterSiteEntities()) 
    { // Get data 
     var transactions = (from t in db.Transactions 
          join td in db.TransactionDetails on t.TransactionID equals td.TransactionID 
          join p in db.Products on td.ProductID equals p.ProductID 
          where t.Exported == false 
          select new 
          { 
           BatchId = batchId, 
           t.FirstName, 
           t.LastName, 
           t.Address1, 
           t.Address2, 
           t.City, 
           t.State, 
           t.Zip_Code, 
           t.Email, 
           t.Phone, 
           t.TotalAmount, 
           t.MonthlyGift, 
           t.DateCreated, 
           p.Fund, 
           ProductFirstName = p.FirstName, 
           ProductLastName = p.LastName, 
           ProductUniversity = p.University, 
           ProductState = p.State, 
           ProductEmail = p.Email, 
           ProductAmount = td.Amount 
          }).ToList(); 
    } 

나는이 작업을 수행 할 때, 나는 오류 메시지가 얻을 :

"A 매개 변수가이 위치에 허용되지 않는 '@'기호에 있는지 확인합니다. 유효한 위치 또는 매개 변수가이 SQL 문에서 모두 유효합니다. "

익명 형식 선언 내에서 batchId 변수를 참조하려면 어떻게해야합니까? 또는 다른 방법으로이 작업을 수행해야합니까?

+0

당신이 생성 된 쿼리를 분석하는 프로파일 러를 사용할 수 있습니다 여기에

은 결과 코드? 'batchId'의 가치는 무엇입니까? – CodeCaster

+0

쿼리에서 BatchId를 제거합니다. 목록을 가져 오면 BatchId를 사용하여 select를 적용합니다. –

+0

@CodeCaster batchId에는 문자열 값 "1234"가 포함되어 있습니다. "select new ..."문에서 batchId 변수를 "1234"값으로 바꾸면 제대로 작동합니다. –

답변

2

SQL Server CE 데이터 액세스 라이브러리에서 알려진 버그가있는 것 같습니다. 데이터베이스에 액세스하는 시스템에 applying this hotfix으로 수정할 수 있어야합니다.

+0

좋은 직장. 이것은 아마도 추가 테스트를 기반으로 한 문제 일 것 같습니다. batchId를 int로 만들면 잘 돌아갑니다. 문자열이면 실패합니다. 불행히도, 해결 방법을 찾을 수있는 경우 핫 픽스를 사용하고 싶지 않습니다. 나는 다른 것을 시도 할 것이다. –

1

아담 마르스가 내 질문에 대답했다고 생각합니다. 서버에 핫 픽스를 설치하고 싶지 않았기 때문에 다른 방법으로 문제를 해결했습니다.

Linq 쿼리에서 문자열 변수를 사용할 수 없으므로 익명 유형의 속성 값을 편집 할 수 없습니다. 익명 타입 사용을 중단하고 "트랜잭션 요약"데이터를 보유 할 엔티티 클래스를 만들었습니다.

일단 TransactionSummary 개체가 있으면 Select() 메서드를 사용하여 각 레코드의 BatchId 속성 값을 업데이트 할 수 있습니다.

// Define a custom type to hold the data 
private class TransactionSummary 
{ 
    public string BatchId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    //...removed lines for brevity... 
} 

//...here is the updated code snippet... 
using (var db = new StarterSiteEntities()) 
{ // Get data 
    var transactions = (from t in db.Transactions 
         join td in db.TransactionDetails on t.TransactionID equals td.TransactionID 
         join p in db.Products on td.ProductID equals p.ProductID 
         where t.Exported == false 
         select new TransactionSummary 
         { 
          FirstName = t.FirstName, 
          LastName = t.LastName, 
          //...removed lines for brevity... 
         }).ToList(); 

    // The client would like a batchID added to each record that we return. 
    var batchId = context.Request["batchid"]; 
    transactions.Select(t => { t.BatchId = batchId; return t; }).ToList(); 
} 
+0

정확히 내가 염두에 두었던 것. –