Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq通过比较选择不同的值_Linq - Fatal编程技术网

Linq通过比较选择不同的值

Linq通过比较选择不同的值,linq,Linq,我有一个物品清单。例如,列表,其中包含字符串(denom)和int(year)。 如果列表包含: "Quarter", 1954 "Quarter", 1990 "Penny", 1925 "Nickel", 1900 "Nickel", 2000 如何获得一个结果列表,其中仅包含最近一年的唯一值?例如: "Quarter", 1990 "Penny", 1925 "Nickel", 2000 您可以通过按名称分组,然后排序并获取第一个结果,或者使用类似于MaxByfrom的方法: 或

我有一个物品清单。例如,
列表
,其中包含字符串(denom)和int(year)。 如果列表包含:

"Quarter", 1954
"Quarter", 1990
"Penny", 1925  
"Nickel", 1900 
"Nickel", 2000
如何获得一个结果列表,其中仅包含最近一年的唯一值?例如:

"Quarter", 1990
"Penny", 1925
"Nickel", 2000

您可以通过按名称分组,然后排序并获取第一个结果,或者使用类似于
MaxBy
from的方法:


您可以使用
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示例中的“max-grouped:

我的键入速度也没有JonSkeet快:)是的,Jon的键入速度比我们所有人都快。不过,我更喜欢我们的答案,更具启发性:-)@Steven:另一方面,这只起作用,因为你只知道名称和年份-如果有其他财产不涉及分组或订购,它将不起作用。谢谢Jon。我用了你的第二个答案。虽然我了解基本的sql概念,但我在哪里可以找到有关如何工作的信息?例如.Select语句及其在.OrderBy中引用x.Year的方式?@tim:GroupBy结果中的每个元素都是一组同名的硬币。如果按年份(降序)对每个组进行排序,那么排序序列中的第一个条目就是该名称的最新硬币。我(仅)得到了分组的概念,并在orderby之后选择最大值,就像在sql中一样。令人困惑的是linq条款。所以GroupBy生成了一个集合,它们在其中进行分组,但我对OrderByDescending子句如何对当前集合进行具体引用感到有点困惑。@tim:GroupBy生成了一系列组。Select作用于每个元素,即每个组。OrderBy位于select中。
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)
    };
 var query = from coin in myList
        group coin by coin.Name into grouped
        select new
        {
            Name = grouped.Key
            Year = grouped.Max(x => x.Year) 
        };