Запрос данных с использованием Linq, возвращающих различные значения - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь получить разные значения из столбца данных. вот мой код ..

var sourceItems = ds.Tables[0].AsEnumerable()
                              .GroupBy(x => x.Field<string>("Source").ToString())
                              .Select(x => x.First());
ddlSource.DataSource = sourceItems;
ddlSource.DataBind();

Этот код возвращает 4 строки System.Data.DataRow в качестве значений. Мне нужны фактические значения, хранящиеся в строках, а не тип строки. Кроме того, является ли этот код правильным способом получения только отдельных значений в столбце?

Ответы [ 3 ]

4 голосов
/ 27 марта 2012

Я бы сделал что-то вроде этого:

var sourceItems = ds.Tables[0].AsEnumerable()
                              .Select(x => x.Field<string>("Source"))
                              .Distinct()
                              .ToList();

Обратите внимание, что .ToList() можно пропустить, но, конечно, это зависит от того, что свойство DataSource объекта ddlSource может принять. Если это контроль winforms, я подозреваю, ToList необходимо.

Ваш код в основном такой же, как этот, но вы должны изменить последний Select на Select(x => x.Key), чтобы выбрать значения, которые используются для группировки строк, а не первую строку.
Кроме того, ваш код требует больше ресурсов, чем при использовании Distinct, так как GroupBy создает подгруппы исходной коллекции.

0 голосов
/ 27 марта 2012

Как насчет

var sourceItems = ds.Tables[0].AsEnumerable() 
                         .Select(x => x.Field<string>("Source")) 
                         .Distinct()
                         .ToList();
     ddlSource.DataSource = sourceItems; 
     ddlSource.DataBind(); 

(Вам не нужно вызывать .ToString() для строки, поэтому я удалил это.)

0 голосов
/ 27 марта 2012

Почему вы не используете .Distinct метод расширения?

ds.Tables[0].AsEnumerable()
  .Select(x => x.Field<string>("Source").ToString())
  .Distinct()
  .FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...