对于可观察集合List,检查LINQ return为null

时间:2013-10-23 14:40:50

标签: c# wpf linq mvvm observablecollection

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

如果itmGetAllData2.Name == strName之间匹配,LINQ上面的工作正常,但如果没有匹配strName的记录则会抛出错误。

有谁能建议如何处理?我试着做了

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

但它给出了施法错误。

3 个答案:

答案 0 :(得分:1)

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

使用FirstOrDefault

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

if (result != null)
{
   // Initalize your ObservableCollection here
}

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

您的代码可以简化为:

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

如果未找到匹配项,Data1将为null。 (这是OrDefault部分添加的内容)如果要将其他值替换为null,则可以这样做,例如

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