列出所有最高数据行或特定数据行

时间:2019-02-19 22:25:40

标签: linq

我有一个表格,其中每一行都使用版本号。现在,我只想拥有类别中版本号最高的那些记录。但是也有一些记录带有负数,准确地说是-1。应该选择这些。

一个例子

Version number|Categegory|Name 
1             |SCHU      |Shoes 
2             |SCHU      |new shoes
1             |HAND      |Gloves 
2             |HAND      |New gloves
-1            |HAND      |New gloves V2

我想要一个打印以下内容的列表。

2 |SCHU|new shoes (Secundary, Selected because max VersionNo)
-1|HAND|New Gloves V2 (Primary, Selected because Special Version)

由www.DeepL.com/Translator

翻译

1 个答案:

答案 0 :(得分:2)

您可以使用表达式在-1时修改排序值,然后选择最高值:

var ans = dt.AsEnumerable()
            .GroupBy(r => r.Field<string>("Category"))
            .Select(rg => rg.OrderByDescending(r => r.Field<int>("VersionNumber") == -1 ? Int32.MaxValue : r.Field<int>("VersionNumber")).First());

请注意,结果为IEnumerable<DataRow>,而不是DataTable。如果要创建一个包含结果行的新CopyToDataTable,则可以使用扩展名DataTable