【问题标题】:How to obliterate possibility of nulls from IEnumerable resultset如何从 IEnumerable 结果集中消除空值的可能性
【发布时间】:2017-01-24 22:15:08
【问题描述】:

如何在此处消除对 Any / null 的检查?

    public List<Incident> GetByServiceActivity(Guid serviceActivityGuid)
    {
        var result = from s in this._xrmServiceContext.ServiceAppointmentSet
                      join i in this._xrmServiceContext.IncidentSet on s.RegardingObjectId.Id equals i.Id
                      select i;

        return result.Any() ? result.Distinct().ToList() : new List<Incident>();
    }

我希望能够像这样简单地返回 1 个表达式:

return from s in this._xrmServiceContext.ServiceAppointmentSet
                          join i in this._xrmServiceContext.IncidentSet on s.RegardingObjectId.Id equals i.Id
                          select i;

我们如何才能隐式返回一个空,而不必检查 .Any()?

【问题讨论】:

  • 如果没有找到结果集,Select 将始终返回一个空的 Enumerable。所以你可以只做return (from s in xrmServiceContext.ServiceAppointmentSet join i in xrmServiceContext.IncidentSet on s.RegardingObjectId.Id equals i.Id select i).ToList() 或者改变你的方法来返回一个public IEnumerable&lt;Incident&gt; GetByServiceActivity(Guid serviceActivityGuid)

标签: c# .net visual-studio dynamics-crm-2011 c#-5.0


【解决方案1】:

任何返回 IEnumerable&lt;T&gt; 的 LINQ 方法永远都不会返回 null 值。它们将始终返回非空 IEnumerableIQueryable。它表示的序列可能是,但绝不会是null

至于空箱的处理,没什么好处理的。您可以在空序列/查询上调用Distinct,就像在非空序列/查询上一样有效,并且您也可以使用ToList 从空或非空序列中创建列表。你根本不需要检查任何东西。

【讨论】:

  • 当然除了像FirstOrDefault这样返回单个实例或空/零的方法。
  • 这可以为空吗?: var result = (from number in _cmContext.SrvLocationWarmLine where String.Compare(number.CurrentWarmLine, startingRange, StringComparison.Ordinal) >= 0 && String.Compare(number. CurrentWarmLine,endingRange, StringComparison.Ordinal)
  • @MeggieLuski 是的,因为它没有返回序列,而是从该序列返回单个值。
猜你喜欢
  • 2012-01-11
  • 1970-01-01
  • 2012-10-26
  • 2012-02-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多