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

本文关键字:选择 Distinct DataTable Linq 使用 | 更新日期: 2023-09-27 18:20:10

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

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

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

您需要使用DataRowComparer

IEnumerable<DataRow> distinctRows = 
    dt.AsEnumerable().Distinct(DataRowComparer.Default);

有关使用linq将数据行与数据集进行比较的更多信息,请访问

我们可以有:

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()在大多数时候都会起作用,要么什么都不做(如果它已经是这样的话),要么可能会减慢速度(如果不同的东西可以在其他地方更好地处理),所以通常最好这样做:

var q = dt.Distinct(DataRowComparer.Default);

尽管在某些情况下前者胜过后者。

(from dr in dt.AsEnumerable() select dr).Distinct();