【问题标题】:LINQ OrderBy and Where combinedLINQ OrderBy 和 Where 结合
【发布时间】:2017-06-12 04:47:41
【问题描述】:

我试图避免在以下情况下对DistanceTo 方法进行多次检查:

public IEnumerable<Object> NearbyObjects => Objects.Where(o => a.DistanceTo(o) < 10).OrderBy(o => a.DistanceTo(o));

public IEnumerable<Object> NearbyObjects => Objects.OrderBy(o => a.DistanceTo(o)).TakeWhile(o => a.DistanceTo(o) < 10);

无论如何,我必须使用两次DistanceTo 方法。可以在 LINQ 中避免这种情况吗?

【问题讨论】:

    标签: c# linq linq-to-objects


    【解决方案1】:

    您可以在 linq 查询语法中使用 let 语句,如下所示:

    public IEnumerable<Object> NearbyObjects =>
       from o in Objects
       let distanceTo = a.DistanceTo(o) 
       where distanceTo < 10
       orderby distanceTo 
       select o;
    

    如果你想使用方法语法,你将不得不临时投影到一个匿名类型

    public IEnumerable<Object> NearbyObjects =>
       Objects.Select(o => new { o, distanceTo = a.DistanceTo(o) })
              .Where(o => o.distanceTo < 10)
              .OrderBy(o => o.distanceTo)
              .Select(o => o.o);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 2012-07-25
      • 2020-06-10
      相关资源
      最近更新 更多