我需要使用linq和C#从数据表中选择不同的记录,我似乎无法使语法正确。我有以下代码,它返回数据表中的所有行,我如何只返回DISTINCT行?
DataTable dt = ds.Tables[0];
var q = from dr in dt.AsEnumerable() select dr;
答案 0 :(得分:7)
您需要使用DataRowComparer
IEnumerable<DataRow> distinctRows =
dt.AsEnumerable().Distinct(DataRowComparer.Default);
有关使用linq与数据集比较数据行的更多信息,请参见here
答案 1 :(得分:2)
我们可以:
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()
都会在大部分时间内完成,或者没有任何东西(如果它已经是这样)或者可能放慢速度(如果在其他地方可以更好地处理),所以通常做得更好:< / p>
var q = dt.Distinct(DataRowComparer.Default);
虽然有些情况下前者胜过后者。
答案 2 :(得分:1)
(from dr in dt.AsEnumerable() select dr).Distinct();