lẽ flags
là danh sách các loại tài liệu tham khảo, và khác biệt không làm việc như bạn mong đợi! Điều này bởi vì Distinct() làm việc không phải trên giá trị của lá cờ trong danh sách, nhưng trên tài liệu tham khảo bộ nhớ của nó (đó là tất cả differents).
Bạn phải viết một lớp so sánh hướng dẫn cách phân biệt cách so sánh cờ bằng nhau. Giả sử bạn có lớp cờ này:
public class flag
{
public string Name { get; set; }
public string Code { get; set; }
}
bạn nên tạo một lớp Comparer như thế này:
class FlagComparer : IEqualityComparer<flag>
{
// Products are equal if their names and product numbers are equal.
public bool Equals(flag x, flag y)
{
//Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
//Check whether the products' properties are equal.
return x.Code == y.Code && x.Name == y.Name;
}
}
và gọi tuyên bố của bạn:
List distinctFlags = flags.Distinct(new FlagComparer()).ToList();
Bằng cách này, phương pháp riêng biệt biết chính xác cách so sánh bằng cờ istance.
CẬP NHẬT
Dựa trên nhận xét của bạn, nếu bạn wanto để làm theo gợi ý của tôi, bạn nên viết cơ sở Comparer như sau:
class FlagComparer : IEqualityComparer<flag>
{
// Products are equal if their names and product numbers are equal.
public bool Equals(flag x, flag y)
{
//Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
//Check whether the products' properties are equal.
return x.HostID == y.HostID && x.RuleID == y.RuleID && x.Flag == y.Flag && x.FlagValue == y.FlagValue;
}
}
Tất nhiên, tất cả các tài sản phải là một kiểu giá trị .
Hãy xem ở đây để làm rõ bản thân:
giá trị đầu vào của bạn là gì và làm những gì bạn mong đợi như đầu ra? –
Đây có phải là bên trong hoặc bên ngoài một dbcontext không? Vui lòng hiển thị thêm mã. Và nếu bạn có thể, đưa ra một ví dụ về dữ liệu trước và sau khi chuyển đổi. –
Nhóm họ lên và chọn người chiến thắng. http://stackoverflow.com/questions/489258/linq-distinct-on-a-particular-property/491832#491832 –