LINQ基于属性值的不同选择

时间:2011-08-24 13:34:33

标签: linq generics

我有一个完整填写国家/地区实例的通用国家/地区列表。

List <Country> mylist

此列表包含不同的国家/地区实例,但有些国家/地区的属性“name”具有相同的值。

我如何区分国家“名称”的属性才能获得具有不同名称的国家/地区?

感谢。

电贺。

何。

2 个答案:

答案 0 :(得分:5)

您可以将MoreLINQDistinctBy方法一起使用:

var distinctCountries = allCountries.DistinctBy(c => c.Name);

(当然,您不必采用所有MoreLINQ - 您可以将这一个方法与ThrowIfNull扩展方法一起复制到您的代码中,并相应地保留许可文本。)

答案 1 :(得分:5)

Jon建议使用MoreLINQ,这显然很好,但也许你想避免另一个依赖。在这种情况下,您可以将Enumerable.Distinct与您自己的IEqualtyComparer<Country>

一起使用
var distinctCountries = myList.Distinct(new EqualityComparerForCountryByName());
//IEqualityComparer
class EqualityComparerForCountryByName : IEqualityComparer<Country> {
     public bool Equals(Country x, Country y) {
         if(Object.ReferenceEquals(x, y)) { return true; } 
         if(x == null || y == null) { return false; }
         return x.Name == y.Name;
     }

     public int GetHashCode(Country obj) {
         if(obj == null) { return 0; }
         return obj.Name.GetHashCode();
     }
}