【问题标题】: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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-28
          • 1970-01-01
          • 2010-09-07
          • 1970-01-01
          • 2011-04-24
          • 1970-01-01
          • 1970-01-01
          • 2016-06-20
          相关资源
          最近更新 更多