【发布时间】:2014-10-18 21:21:27
【问题描述】:
我需要使用 linq 和 C# 从数据表中选择不同的记录,但我似乎无法获得正确的语法。我有以下代码,它返回数据表中的所有行,我如何只返回 DISTINCT 行?
DataTable dt = ds.Tables[0];
var q = from dr in dt.AsEnumerable() select dr;
【问题讨论】:
标签: c# linq datatable distinct
我需要使用 linq 和 C# 从数据表中选择不同的记录,但我似乎无法获得正确的语法。我有以下代码,它返回数据表中的所有行,我如何只返回 DISTINCT 行?
DataTable dt = ds.Tables[0];
var q = from dr in dt.AsEnumerable() select dr;
【问题讨论】:
标签: c# linq datatable distinct
您需要使用DataRowComparer
IEnumerable<DataRow> distinctRows =
dt.AsEnumerable().Distinct(DataRowComparer.Default);
有关使用 linq 与数据集比较数据行的更多信息,请参阅here
【讨论】:
我们可以:
var q = (from dr in dt.AsEnumerable() select dr).Distinct(DataRowComparer.Default);
但实际上,from x in ... select x 是多余的,所以我们可以:
var q = dt.AsEnumerable().Distinct(DataRowComparer.Default);
但是大部分时间AsEnumerable() 都会做,要么什么都没有(如果它已经是这样的话)要么可能会减慢速度(如果可以在其他地方更好地处理 distinct),所以通常最好这样做:
var q = dt.Distinct(DataRowComparer.Default);
虽然有些情况下前者胜过后者。
【讨论】:
(from dr in dt.AsEnumerable() select dr).Distinct();
【讨论】: