2013-05-01 2 views
0

linq 쿼리 int 결과를 얻으려고합니다. 내가 만든 FileHelpers 클래스와 동일한 유형의 배열을 만들고 배열 한 다음 데이터를 쿼리하고 방금 만든 배열에 값을 할당했습니다.Linq to FileHelpers 클래스

나는 다음과 같은 오류가 발생합니다 :

Object reference not set to an instance of an object. 

이상한 것은 오류를주는 항목에 할당 된 값을 받고 한 것입니다. 확실하지 않음이 일어나는 이유 :

NorthwindEntities dbContext = new NorthwindEntities(); 
     var q = from d in dbContext.Products 
       select d; 
     producdt[] items = new producdt[q.Count()]; 

     for (int i = 0; i < q .Count(); i++) 
     { 
      items[i].Field1 = q.ToList()[i].ProductName; 
     } 
     FileHelperEngine<producdt> engine = new FileHelperEngine<producdt>(); 
      engine.WriteFile("test.text", items); 

제품 클래스를 포함 :

[FixedLengthRecord(FixedMode.ExactLength)] 
public sealed class producdt 
{ 

[FieldFixedLength(10)] 
public String Field1; 

[FieldFixedLength(10)] 
public String Field2; 

[FieldFixedLength(10)] 
public String Field3; 

[FieldFixedLength(10)] 
public String Field4; 

[FieldFixedLength(10)] 
public String Field5; 


} 
+0

는'객체 나 기록을 producdt' 있습니까? 또한, 이것은 * 크게 최적화 될 수 있으며, 데이터베이스에 3 회 여행 할 때 실제로 하나에서 수행 될 수 있습니다. – James

+0

오류는 라인 항목 [i] .field1 = q.ToList() [i] .ProductName; – user2275571

+0

다시 말하자면 클래스 나 레코드를 '생산'합니까? – James

답변

4

당신은 for 루프에서 사용하기 전에 items[i]를 초기화해야합니다. 문제는 배열을 만들었지 만 개별 요소는 null입니다. Select()을 사용하여 프로젝션을 한 후 linq 쿼리를이 배열에 반환하려고 할 것입니다. 내가 클래스의 특성을 모르는 있지만

, 난 당신이 다음 줄에 할 거라고 생각 :

producdt[] items = (from d in dbContext.Products 
        select new producdt(){ 
              Field1 = d.Field1, 
              Field2 = d.Field2, 
              Field3 = d.Field3, 
              Field4 = d.Field4 
             }).ToArray(); 
+1

즉, 'productdt'가 어떤 종류의 오류인지를 정확히 알 수는 있었지만 실제로는 'productdt'가 레퍼런스 유형이라고 가정합니다. –

+0

WriteFile 메서드는 ToArray()도 피할 수 있도록 IEnumerable을 허용합니다. var items = (dbContext.Products에서 d를 선택하면 새 producdt() {Name = d.Name})를 선택합니다. – MarcosMeli

+0

위의 작업을 시도 할 때 오류가 발생했습니다. 오류 'AnonymousType # 1 []'을 'producdt'로 암시 적으로 변환 할 수 없습니다 – user2275571