如何在linq查询中插入此条件
本文关键字:插入 条件 查询 linq | 更新日期: 2023-09-27 18:05:27
这是我的代码:
IEnumerable<Blob> sortedList = from element in source
let locationx = element.Rectangle.X
let locationy = element.Rectangle.Y
orderby locationy ascending, locationx descending
select element ;
,我想插入这个条件:
对差值小于5的元素进行排序,并按位置x升序排序
locationy[指数+ 1]-locationy(指数)& lt; 5
的例子:
Sorted(in my code) Desired
--------- ---------
x y x y
10 0 10 0
5 6 2 10
2 10 5 6
8 17 8 17
如果您提到的排序逻辑/算法是某种业务逻辑和您的应用程序范围内众所周知的需求,基本上不是一次特殊情况,我建议将此逻辑封装在实现IComparer<T>
(MSDN)的新类中,并将其与通用List<T>.Sort()
(MSDN)甚至LINQ OrderBy()方法一起使用。因此,您将保持代码库更加清晰和解耦。
OK - really不确定我是否理解了这个问题(参见我的评论)我假设我对你的问题的评论是正确的(你想先按Y排序,但只能在5块中,并在这些块中按X排序)
本质上,我按Y 除以 5排序,并转换为int
-因此(例如)0-4将一起排序,5-9也是如此,等等。
在(我的首选)扩展语法中:
source
.OrderBy(element=>(int)(element.Rectangle.Y/5))
.ThenByDescending(element=>element.Rectangle.X);
或者,您更喜欢
IEnumerable<Blob> sortedList = from element in source
let locationx = element.Rectangle.X
let locationy = element.Rectangle.Y
orderby (int)(locationy/5) ascending, locationx descending
select element ;