【问题标题】:LINQ query to get the all the datarows based on a distinct columnLINQ 查询以获取基于不同列的所有数据行
【发布时间】:2017-02-01 23:23:58
【问题描述】:

VB.Net 我有以下 LINQ 查询

Dim temp = (From r In datatable Select r Order By r.str Descending)

但我希望它基于str 列是唯一的。我知道如何从 LINQ 中获取 str column 并将其标记为 distinct。但我想要整行(所有列)并具有基于str 列的不同

类似

 Dim temp = (From r In datatable Select r Order By r.str Descending).distinct(r.str)

如果有人可以用 C# 给我答案,我会用 VB.Net 翻译它

样本

数据表

col1 col2 str
A    B     X
A1   B1    Y
A2   B2    X

输出应该是

col1 col2 str
A     B    X
A1    B1   Y

【问题讨论】:

  • 我想你想使用 GroupBy : var results = datatable.AsEnumerable().GroupBy(x => x.Field("str")).ToList();

标签: c# vb.net linq linq-to-dataset


【解决方案1】:

如果您只想从具有相同str 字段值的行中选择第一行:

from r in datatable.AsEnumerable()
group r by r.Field<string>("str") into g
orderby g.Key descending
select g.First()

或方法语法

datatable.AsEnumerable()
         .GroupBy(r => r.Field<string>("str"))
         .OrderByDescending(g => g.Key)
         .Select(g => g.First())

【讨论】:

  • 我已经相应地编辑了我的问题。抱歉,如果我一开始没有正确提出问题
  • 是的,这个查询给出了你想要的东西
  • 我的错,我在阅读答案的第一行时感到困惑,我将尝试此查询并相应地接受答案。 :) 谢谢陛下!
【解决方案2】:

按您想要区分的列的第一个组,然后选择每个组的第一个。这将为您提供指定字段中每个不同值的所有列。

dim results = myDataContext.myTable.GroupBy(Function(f) f.myDistinctField).Select(Function(j) j.FirstOrDefault())

【讨论】:

  • 我已经添加了我想要实现的示例输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2016-07-08
  • 2023-03-18
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
相关资源
最近更新 更多