如何在linq查询中插入此条件

时间:2011-08-14 18:56:42

标签: c# linq sorting

这是我的代码:

   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的元素进行排序,并将它们排序为locationx升序

locationy [指数+ 1] -locationy [指数]小于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

2 个答案:

答案 0 :(得分:0)

好的 - 真的不确定我是否理解了这个问题(请参阅我的评论) 我假设我对你的问题的评论是正确的(你想先按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 ;

答案 1 :(得分:0)

如果您提到的排序逻辑/算法是某种业务逻辑和应用程序范围内众所周知的要求,基本上不是一次性的特殊情况,我建议将此逻辑封装在一个实现的新类中IComparer<T>MSDN)并将其与通用List<T>.Sort()MSDN)或LINQ OrderBy()方法一起使用。因此,您将保持代码库更加清晰和分离。