Как использовать Distinct для столбца с помощью Linq - PullRequest
5 голосов
/ 13 октября 2009

Вот мой код:

var query = from row1 in table.AsEnumerable()
                         let time = row1.Field<DateTime>("time")
                         let uri = row1.Field<string>("cs-uri-stem")
                         let ip = row1.Field<string>("c-ip")
                         let questionid = row1.Field<int>("questionid")
                         where questionid == int.Parse(table.Rows[x]["questionid"].ToString())
                         select new
                         {
                             time,
                             uri,
                             ip,
                             questionid
                         };

Столбец ip должен быть уникальным. У меня не может быть дубликатов в поле ip. Можно ли сделать это в linq

Ответы [ 3 ]

7 голосов
/ 13 октября 2009

Вы можете достичь желаемого, группируя по ip-адресу, но тогда вам нужно будет знать, как вы хотите обрабатывать другие поля, когда у вас есть дубликаты.

var query = from row1 in table.AsEnumerable()
                     let time = row1.Field<DateTime>("time")
                     let uri = row1.Field<string>("cs-uri-stem")
                     let ip = row1.Field<string>("c-ip")
                     let questionid = row1.Field<int>("questionid")
                     where questionid == int.Parse(table.Rows[x]["questionid"].ToString())
                     group by ip into g
                     select new
                     {
                         time = g.time.First(),
                         uri = g.uri.First(),
                         ip = g.Key,
                         questionid = g.questionid.First()
                     };
2 голосов
/ 13 октября 2009

Вы также можете использовать Distinct() со средством сравнения равенства (т. Е. Передать метод, который будет сравнивать значение IP и игнорировать остальные). Но как спрашивает tvanfosson, какова правильная процедура для обработки дублированных значений?

2 голосов
/ 13 октября 2009

Вы можете выполнить Distinct только для всех выбранных вами полей, а не только для одного поля (какие значения вы бы выбрали для других полей?).

Этого можно добиться с помощью метода расширения Distinct:

        var query = (from row1 in table.AsEnumerable()
                     let time = row1.Field<DateTime>("time")
                     let uri = row1.Field<string>("cs-uri-stem")
                     let ip = row1.Field<string>("c-ip")
                     let questionid = row1.Field<int>("questionid")
                     where questionid == int.Parse(table.Rows[x]["questionid"].ToString())
                     select new
                     {
                         time,
                         uri,
                         ip,
                         questionid
                     }).Distinct();
...