我有一個對象列表。例如。 List<coin>
它們包含一個字符串(denom)和int(年)。 如果列表中包含:Linq通過比較選擇不同的值
"Quarter", 1954
"Quarter", 1990
"Penny", 1925
"Nickel", 1900
"Nickel", 2000
我怎樣才能得到它包含只是最近一年的唯一值的結果的列表?例如:
"Quarter", 1990
"Penny", 1925
"Nickel", 2000
我有一個對象列表。例如。 List<coin>
它們包含一個字符串(denom)和int(年)。 如果列表中包含:Linq通過比較選擇不同的值
"Quarter", 1954
"Quarter", 1990
"Penny", 1925
"Nickel", 1900
"Nickel", 2000
我怎樣才能得到它包含只是最近一年的唯一值的結果的列表?例如:
"Quarter", 1990
"Penny", 1925
"Nickel", 2000
您可以通過名字,那麼無論排序分組和採取的第一個結果,或通過使用來自MoreLINQ像MaxBy
做到這一點:
var query = coins.GroupBy(x => x.Name)
.Select(g => g.MaxBy(x => x.Year));
或
var query = coins.GroupBy(x => x.Name)
.Select(g => g.OrderByDescending(x => x.Year).First());
var coins = new Coin[] { ... };
var recentCoins =
from coin in coins
group coin by coin.Denom into g
select new
{
Denom = g.Key,
MostRecentYear = g.Max(c => c.Year)
};
你可以使用group by
這樣做:
var query = from coin in myList
group coin by coin.Name into grouped
select new
{
Name = grouped.Key
Year = grouped.Max(x => x.Year)
};
對於這樣的另一個樣品,檢查了 「最大 - 分組」,在101 LINQ的例子:http://msdn.microsoft.com/en-us/vcsharp/aa336747#maxGrouped
我認爲該鏈接是http://code.google.com/p/morelinq/ – Stuart 2011-04-24 13:12:10
謝謝喬恩。我用你的第二個答案。雖然我理解基本的SQL概念,但我可以在哪裏找到關於它如何工作的信息?例如。 .Select語句以及它如何在.OrderBy中引用x.Year? – tim 2011-04-24 13:20:05
@tim:「GroupBy」結果中的每個元素都是一組具有相同名稱的硬幣。如果按照年份(降序)對每個組進行排序,那麼排序序列中的第一個條目就是該名稱的最新幣。 – 2011-04-24 13:39:31