【问题标题】:Check LINQ return is null for observable collection List检查可观察集合列表的 LINQ 返回是否为空
【发布时间】:2013-11-01 21:55:54
【问题描述】:
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);
但它给出了投射错误。
【问题讨论】:
标签:
c#
wpf
linq
mvvm
observablecollection
【解决方案1】:
您的代码可以简化为:
Data1 = GetAllData2.FirstOrDefault(x => x.Name == strName);
如果找不到匹配项,Data1 将是 null。 (这就是OrDefault 部分添加的内容)如果您想用不同的值替换 null,您可以这样做,例如
Data1 = GetAllData2.FirstOrDefault(x => x.Name == strName) ?? new dsData1();
【解决方案2】:
您收到此错误的原因是您尝试访问空查询的第一个元素。
使用FirstOrDefault
var result = GetAllData2.FirstOrDefault(ad => ad.Name = strName);
if (result != null)
{
// Initalize your ObservableCollection here
}
【解决方案3】:
当没有匹配项时,您会收到此错误,因为 [0] 正在尝试访问没有任何对象的列表的第一个对象。改为这样做:
Data1 = GetAllData2.FirstOrDefault(d => d.Name == strName);
这将是您想要的第一个项目,如果没有找到,则为 null。