Linq,选择List Item,其中column是最大值

时间:2014-08-14 13:49:07

标签: c# linq

我基本上有一个List,里面有几列。我想要做的就是选择名为Counted的列中具有最高int的List项。

List<PinUp> pinned= new List<PinUp>();

class PinUp
{
    internal string pn { get; set; }
    internal int pi{ get; set; }
    internal int Counted { get; set; }
    internal int pp{ get; set; }
}

所以基本上我只想要pinned[whichever int has highested Count]

希望这是有道理的

问题是我想从当前列表中删除此[具有高位数的int]。所以我不得不在数组中使用哪个int

5 个答案:

答案 0 :(得分:2)

var excludingHighest = pinned.OrderByDescending(x => x.Counted)
                             .Skip(1);

如果您需要复制正在删除的副本并仍然需要删除它,您可以执行类似

的操作
var highestPinned = pinned.OrderByDescending(x => x.Counted).Take(1);
var excludingHighest = pinned.Except(highestPinned);

答案 1 :(得分:2)

单程,按顺序排序:

PinUp highest = pinned
    .OrderByDescending(p => p.Counted)
    .First();

即使有多个具有最高Counted的多个,也只返回一个。另一种方法是使用Enumerable.GroupBy

IEnumerable<PinUp> highestGroup = pinned
    .GroupBy(p => p.Counted)
    .OrderByDescending(g => g.Key)
    .First();

如果您只想获得最高Counted(我怀疑),您只需使用Enumerable.Max

int maxCounted = pinned.Max(p => p.Counted);

更新

  

问题是我想从当前列表中删除这个[具有高位数的int]。

然后您可以使用List(T).RemoveAll

int maxCounted = pinned.Max(p => p.Counted);
pinned.RemoveAll(p => p.Counted == maxCounted);

答案 2 :(得分:1)

您可以订购:

var pin = pinned.OrderByDescending(p => p.Counted).FirstOrDefault();
// if pin == null then no elements found - probably empty.

如果你想删除,你不需要索引:

pinned.Remove(pin);

答案 3 :(得分:1)

尝试以下方法:

PinUp pin = pinned.OrderByDescending(x => x.Counted).First();

答案 4 :(得分:1)

这是一个排序问题。 按Counted降序排列列表,然后选择第一项。 Linq有办法做到这一点:

var highest = pinned.OrderByDescending(p => p.Counted).FirstOrDefault();