2009-10-12 2 views
5

Вот мой код:Как использовать Distinct на колонке с использованием Linq

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. можно ли это сделать в linq

ответ

7

Вы можете добиться того, что вы хотите, группируя по адресу 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() 
        }; 
+0

это отлично работало. благодаря – Luke101

2

Вы можете выполнять только 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(); 
2

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

Смежные вопросы