Các đơn thuần LINQ như vậy xảy ra là để nhóm theo tên, chọn nhóm riêng biệt theo mã, sau đó chọn dựa trên đó.
from i in user
group new {i.ID, i.Country, i.DateRecord} by i.Name into byNmGp
select byNmGp.First();
Edit: Entity Framework là tất nhiên một nhà cung cấp LINQ rất phổ biến, nhưng nó không xử lý First()
tốt ở đây, mặc dù logic tương đương (trong trường hợp này) FirstOrDefault()
sẽ hoạt động tốt. Tôi thích First()
khi không bị ép buộc vào FirstOrDefault()
bởi những hạn chế của EF, vì ý nghĩa của nó phù hợp hơn với những gì được tìm kiếm ở đây.
Một cách khác là xác định một lớp helper:
private class MyRecord : IEquatable<MyRecord>
{
public int ID;
public string Name;
public string Country;
public DateTime DateCreated;
public bool Equals(MyRecord other)
{
return Name.Equals(other.Name);
}
public override bool Equals(object obj)
{
return obj is MyRecord && Equals((MyRecord)obj);
}
public override int GetHashCode()
{
return Name.GetHashCode();
}
}
/*...*/
var items = (from i in user select new MyRecord {i.ID, i.Name, i.Country, i.DateRecord}).Distinct();
này chỉ đơn giản định nghĩa riêng biệt khác nhau. Hiệu suất sẽ khác nhau tùy theo nhà cung cấp truy vấn có thể giải thích định nghĩa bình đẳng đó hay không. Tiện lợi sẽ khác nhau dựa trên việc bạn có các truy vấn LINQ tương tự làm nhiều điều tương tự hay không.
Nguồn
2010-08-22 16:33:38
Bạn đã ngụ ý có nhiều bản ghi cho mỗi 'Tên'. Nếu điều đó là đúng, thì câu hỏi cũng nên chỉ ra cách chọn các trường khác (id, quốc gia, datecreated). Ví dụ, đối với mỗi Tên, bạn có muốn bản ghi với mức tối thiểu được thiết lập không? – crokusek