Выберите Distinct из DataTable, используя Linq и C # - PullRequest
1 голос
/ 13 января 2012

Мне нужно выбрать отдельные записи из таблицы данных, используя linq и C #, и я не могу получить правильный синтаксис. У меня есть следующий код, который возвращает все строки в таблице данных, как мне просто вернуть строки DISTINCT?

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

Ответы [ 3 ]

7 голосов
/ 13 января 2012

Вам нужно будет использовать DataRowComparer

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

Более подробную информацию о сравнении строк данных с использованием linq для набора данных можно найти здесь

2 голосов
/ 13 января 2012

Мы могли бы иметь:

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);

Хотя бывают случаи, когда первоебьет последний.

1 голос
/ 13 января 2012
(from dr in dt.AsEnumerable() select dr).Distinct();
...