LINQ OrderBy 和 Where 结合
Posted
技术标签:
【中文标题】LINQ OrderBy 和 Where 结合【英文标题】:LINQ OrderBy and Where combined 【发布时间】: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 中避免这种情况吗?
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于LINQ OrderBy 和 Where 结合的主要内容,如果未能解决你的问题,请参考以下文章
C# LINQ 详解 From Where Select Group Into OrderBy Let Join
OrderBy 将 Dynamic Linq 与 Relation 结合使用
Linq to Entities 中的动态 where 子句 (OR)
带有 lambda 表达式的 LINQ where 子句具有 OR 子句和返回不完整结果的空值