使用Linq和C#从DataTable中选择Distinct

时间:2012-01-13 15:59:10

标签: c# linq datatable distinct

我需要使用linq和C#从数据表中选择不同的记录,我似乎无法使语法正确。我有以下代码,它返回数据表中的所有行,我如何只返回DISTINCT行?

DataTable dt = ds.Tables[0];
var q = from dr in dt.AsEnumerable() select dr;

3 个答案:

答案 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();