Linq通过有条件的顺序

时间:2012-09-07 02:31:35

标签: c# linq

我正在搜索图片列表,我想找到“最合适”。即,如果图像集包含高于H像素的成像器,我想获得高度大于H最短图像,如果图像集包含高度大于H的图像,那么我只想拍摄最高的整体图像。

这是我到目前为止所得到的:

var imageFile =
    from f in imageObj.Files
    orderby f.Height > height descending, f.Height ascending, f.Height descending
    select f;

显然这不起作用 - 我无法弄清楚如何在那里设置条件。

有什么建议吗?


请注意,我的问题与this one不同,其中条件可以预先评估;我的取决于f

3 个答案:

答案 0 :(得分:6)

order by f.Height > height ? f.Height : 1000000 - f.Height

首先将图像高于高度,然后按相反的顺序显示低于高度的图像。

答案 1 :(得分:1)

对不起任何拼写错误,我没有编译器方便,这会有用吗?

抓住所有>,orderB,取第一个,如果为null,取最大值?

  var greaterThan = imageObj.Files.Where( f => f.Height > height );
         var imageFile = greaterThan.OrderBy( f => f.Height ).FirstOrDefault() 
                     ??  imageObj.Files.OrderBy( f => f.Height ).FirstOrDefault();

答案 2 :(得分:1)

如果文件高于某个高度进行排序,您可以按该高度的距离排序:

var imageFile =
    from f in imageObj.Files
    orderby f.Height > height descending, Math.Abs(f.Height - height) ascending
    select f;