如何在C#linq中找到集合的最小差异对象

问题描述 投票:0回答:3

我有收藏集

Class MyData
{
 int f1;
 int f2;
 int f3;
 int f4;
}

var mycollection =List<MyData>();

我需要返回字段f1f3之间具有最小差异的对象。

我在下面的查询中尝试过

mycollection.select(obj => obj.f1 - obj.f3).Min();

但是它将返回差异编号。我需要返回对象。我有点想获得具有最小差异的对象

我也尝试过此

mycollection.Select(obj => new { MyObject = obj,
                diff = obj.MaxTemparature - obj.MinimumTemparature, obj
            }).Min(obj => obj.diff);
c# linq iqueryable
3个回答
0
投票

您可以执行以下步骤按差F1 - F3查找对象。

  1. 使用.Select()计算差并将其与实际对象一起存储。
  2. 使用.OrderBy()进行排序,并使用差作为谓词。
  3. 从中获取第一条记录。

    var result = myData.Select(x => new {diff = x.F1 - x.F3, obj = x})  //Step 1
                 .OrderBy(y => y.diff)   //Step 2
                 .FirstOrDefault();     //Step 3
    

Try it online


0
投票

尝试这个

 MyData myData = mycollection.OrderBy(o => (o.f1 - o.f3)).First();

0
投票

尝试如下。

 mycollection.OrderBy(x => Math.Abs(x.f1 - x.f3)).FirstOrDefault();

按差额订购您的收藏,您想要minimal difference如此使用Math.Abs(x.f1 - x.f3)。然后取FirstOrDefault对象。

© www.soinside.com 2019 - 2024. All rights reserved.