0
Data1 = new ObservableCollection<dsData1>(from itmGetAllData2 in GetAllData2
                                          where itmGetAllData2.Name == strName
                                          select itmGetAllData2)[0]; 

如果两者之间存在匹配,则上面的 LINQ 工作正常,itmGetAllData2.Name == strName但如果没有匹配的记录strName,则会引发错误。

谁能建议如何处理这个问题?我试着做

.DefaultIfEmpty().Max(itmGetAllData2 => itmGetAllData2 == null ? "" : itmGetAllData2);

但它给出了铸造错误。

4

3 回答 3

1

您收到此错误的原因是您试图访问空查询的第一个元素。

利用FirstOrDefault

var result = GetAllData2.FirstOrDefault(ad => ad.Name = strName);

if (result != null)
{
   // Initalize your ObservableCollection here
}
于 2013-10-23T14:44:58.860 回答
1

当没有匹配项时会出现此错误,因为 [0] 正在尝试访问没有任何对象的列表的第一个对象。改为这样做:

Data1 = GetAllData2.FirstOrDefault(d => d.Name == strName);

这将是您想要的第一个项目,如果没有找到,则为 null。

于 2013-10-23T14:45:15.697 回答
1

您的代码可以简化为:

Data1 = GetAllData2.FirstOrDefault(x => x.Name == strName);

如果没有找到匹配项,Data1将为null. (这就是该OrDefault部分添加的内容)如果您想用不同的值替换 null,您可以这样做,例如

Data1 = GetAllData2.FirstOrDefault(x => x.Name == strName) ?? new dsData1();
于 2013-10-23T14:45:40.723 回答