2013-10-22 188 views
0

我闡述了在這個問題上:Create object from LINQ對象具有自定義列表

我不得不從列表中contactsList改變其中將包含名稱和ID的列表。

public class DataItem 
{ 
    public String Location { get; set; } 
    public List<ContactInfo> ContactsList { get; set; } 
} 

public class ContactInfo 
{ 
    public String PersonName { get; set; } 
    public Int32 PersonId { get; set; } 
} 

     var myData= from table in sqlResults.AsEnumerable() 
         group table by table["LOCATION"] into groupby 
         select new DataItem 
         { 
          Location = groupby.Key.ToString(), 
          ContactsList = groupby.Select(row => new ContactInfo 
          { 
           PersonName = row["PERSON"].ToString(), 
           PersonId = (Int32)row["PERSONID"] 
          }).ToList() 
         }; 
//TreeView 
tv.DataContext = BrokerData; 

我得到一個指定的強制轉換無效

我在做什麼錯誤嗎?

UPDATE

我得到一個在這裏突出錯誤:

new ContactInfo 
{ 
    PersonName = row["PERSON"].ToString(), 
    PerrsonId = (Int32)row["PERSONID"] 
}). 
+1

嗯,我們甚至看不到'ContactTypeContactId'在你的類實例。 – Arran

+5

我的猜測是,行[「PERSONID」]不是'Int32',而是一個'long'。 – McGarnagle

+0

拋出異常在哪裏?在那個位置,被施放的物體的實際價值是多少,投射到什麼地方?賠率是在這一點上,你需要將它轉換爲它到底是什麼,然後*轉換*它,而不是鑄造它,你需要它的人。 – Servy

回答

2

取而代之的是弱類型索引

PersonId = (Int32)row["PERSONID"] 

使用強類型Field擴展方法

PersonId = row.Field<Int32>("PERSONID") 

如果PERSONID可以爲空,你想存儲null在這種情況下,使PERSONID可空:

public Int32? PersonId { get; set; } 

PersonId = row.Field<Int32?>("PERSONID") 
相關問題