2013-05-01 45 views
0

我想獲得一個linq查詢int文件的結果。我創建了與我創建的FileHelpers類相同類型的數組,然後查詢數據並將值分配給剛剛創建的數組。Linq到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 2013-05-01 17:13:41

+0

錯誤是在行項目[i] .field1 = q.ToList()[i] .ProductName; – user2275571 2013-05-02 13:19:53

+0

讓我重新詞組 - 是'producdt'類或記錄? – James 2013-05-02 13:31:05

回答

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'是一個引用類型(它很可能是),儘管它可以幫助您知道哪一行發生了錯誤。 – 2013-05-01 16:30:20

+0

WriteFile方法接受IEnumerable,因此您也可以避免使用ToArray()。 var items =(從dbContext.Products中的d中選擇new producdt(){Name = d.Name}); – MarcosMeli 2013-05-02 13:15:05

+0

這是錯誤,當我嘗試上述任務: 錯誤無法隱式地將類型'AnonymousType#1 []'轉換爲'producdt' – user2275571 2013-05-02 13:18:28