2009-04-01 58 views
10

Chỉ muốn kiểm tra xem có cách nào để phân biệt bằng nhiều cột hay không. Cảm ơn trước!!!LINQ to DataSet, khác biệt theo nhiều cột

BTW, tôi thấy một phần mở rộng LINQ lớn here nhưng cần một số hướng dẫn để sử dụng nó cho nhiều cột

Trả lời

31

Vâng, bạn có thể làm chiếu đầu tiên:

var qry = db.Customers.Select(cust => new {cust.ID, cust.Name, cust.Region}) 
        .Distinct(); 

Hoặc trong cú pháp truy vấn:

var qry = (from cust in db.Customers 
      select new {cust.ID, cust.Name, cust.Region}).Distinct(); 

Đó làm gì?

5

Bằng cách "riêng biệt theo nhiều cột" những gì bạn thực sự có nghĩa là một nhóm bằng.

Khi bạn yêu cầu riêng biệt, điều đó có nghĩa là bạn đang nhận được TẤT CẢ các hàng riêng biệt hoặc nhóm bằng cách sử dụng tất cả các cột trong bảng.

Nếu bạn muốn chỉ nhận các nhóm riêng biệt cho một tập con của các cột, sau đó sử dụng một nhóm theo trong mệnh đề của bạn, chỉ định các cột để nhóm theo. Sau đó, chọn các nhóm, vì bạn chỉ muốn một bộ khóa cho mỗi nhóm.

11

Thay vì biệt bạn có thể sử dụng groupby và sau đó chọn kỷ lục nhiều nhất của mỗi nhóm

How to LINQ Distinct by Multiple Fields without anonymous types

trở về từ o trong objEntity

   group o by new 
       { 
        o.Field1, 
        o.Field2, 
        o.Field3, 
        o.Field4, 
        o.Field5 
       } into grp 
       select grp.FirstOrDefault(); 

Điều này sẽ cung cấp cho bạn EntityObject Thay vì AnonymousType

1

var qry = (từ cust trong db.Customers chọn mới {cust.ID, cust.Name, cust.Region}). Groupby (x => mới {x. Name, x.Region}), chọn (z => z.OrderBy (i => i.cust) .FirstOrDefault()). ToList();

2

Một tùy chọn dễ dàng khác là tạo một chuỗi riêng biệt.

var result = collection.DistinctBy(c => c.Field1 + "." + c.Field2 + "." + c.Field3); 
Các vấn đề liên quan