2009-10-12 34 views
5

Đây là mã của tôi:Làm thế nào để sử dụng một biệt trên một cột sử dụng 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 
         }; 

Các ip cột phải là duy nhất. Tôi không thể có các mục trùng lặp trong trường ip. bạn có thể thực hiện điều này trong linq

Trả lời

7

Bạn có thể đạt được những gì bạn muốn bằng cách nhóm bằng địa chỉ ip, nhưng sau đó bạn sẽ cần phải biết làm thế nào bạn muốn xử lý khác các trường khi bạn có bản sao.

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

điều này hiệu quả. Cảm ơn – Luke101

2

Bạn chỉ có thể thực hiện Distinct trên tất cả các trường bạn chọn, không chỉ trên một trường (bạn sẽ lấy giá trị nào cho các trường khác?).

Bạn có thể đạt được điều đó bằng cách sử dụng phương pháp Distinct mở rộng:

 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

Bạn cũng có thể sử dụng Distinct() với một comparer bình đẳng (tức là vượt qua trong một phương pháp mà sẽ so sánh giá trị IP, và bỏ qua phần còn lại). Nhưng như tvanfosson hỏi, thủ tục chính xác để xử lý các giá trị trùng lặp là gì?

Các vấn đề liên quan