Tôi có một truy vấn L2E trả về một số dữ liệu có chứa các đối tượng trùng lặp. Tôi cần phải loại bỏ những đối tượng trùng lặp. Về cơ bản tôi nên giả định rằng nếu ID của họ là như nhau thì các đối tượng là trùng lặp. Tôi đã thử q.Distinct()
, nhưng điều đó vẫn trả về các đối tượng trùng lặp. Sau đó, tôi đã thử thực hiện IEqualityComparer của riêng mình và chuyển nó tới phương thức Distinct()
. Phương pháp này thất bại với văn bản sau đây:Cách triển khai IEqualityComparer để trả về các giá trị khác biệt?
LINQ to Entities không nhận ra phương pháp 'System.Linq.IQueryable
1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable
1 [DAL.MyDOClass], System.Collections.Generic.IEqualityComparer`1 [DAL.MyDOClass ]) Phương pháp ' và phương pháp này không thể được dịch sang biểu thức cửa hàng.
Và đây là việc thực hiện các EqualityComparer:
internal class MyDOClassComparer: EqualityComparer<MyDOClass>
{
public override bool Equals(MyDOClass x, MyDOClass y)
{
return x.Id == y.Id;
}
public override int GetHashCode(MyDOClass obj)
{
return obj == null ? 0 : obj.Id;
}
}
Vậy làm thế nào để tôi viết riêng tôi IEqualityComparer
đúng cách?
1 Đây là một cuộc sống tiết kiệm, tuy nhiên lưu ý rằng bạn không thể sử dụng. Đầu tiên() thay vào đó bạn sẽ phải sử dụng .FirstOrDefault() –
Tôi nợ bạn một nền giáo dục! Một trong những câu trả lời đó tôi ước tôi có thể đứng lên bỏ phiếu! – seebiscuit
@yoelhalb không GroupBy đảm bảo không có nhóm nào được trả lại trống không? Không có cách nào cho một trong các nhóm được trả về trống, vì các nhóm được tạo thành bằng cách tách các phần tử – vijrox