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);
但它给出了施法错误。
答案 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();