2013-10-22 173 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") 
相关问题