gpt4 book ai didi

c# - 使用 Lambda 获取不同的父项

转载 作者:行者123 更新时间:2023-11-30 21:59:38 25 4
gpt4 key购买 nike

我有以下三个类;

public class City
{
public int CityId { get; set; }
public Region Region { get; set; }
public string Name { get; set; }
}

public class Region
{
public int RegionId { get; set; }
public Country Country { get; set; }
public string Name { get; set; }
}

public class Country
{
public string CountryCode { get; set; }
public string Name { get; set; }
}

我填充了一个包含多个城市的城市列表对象,每个城市都有一个地区和一个国家。

现在我想获取所有城市的所有国家列表。我试过以下方法;

List<City> CityObjectList = GetAllCity();
CityObjectList.Select(r => r.Region).ToList().Select(c => c.Country).ToList();

但是,我得到的只是所有国家。我怎样才能得到不同的国家?

最佳答案

您可以使用:

var allCityCountries = CityObjectList.Select(c => c.Region.Country).ToList();

此列表不明确。要使国家/地区独一无二,您可以覆盖 Equals + GetHashCodeCountry , 实现自定义 IEqualityComparer<Country>对于 Enumerable.Disinct或使用 GroupBy (最慢但最简单的选项):

var distinctCountries = CityObjectList
.Select(c => c.Region.Country)
.GroupBy(c => c.CountryCode)
.Select(g => g.First())
.ToList();

IEqualityComparer<T>方式:

class CountryCodeComparer : 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.CountryCode == y.CountryCode;
}

public int GetHashCode(Country obj)
{
return obj == null ? 0 : obj.CountryCode == null ? 0 : obj.CountryCode.GetHashCode();
}
}

现在您可以使用 Distinct有一个实例:

var comparer = new CountryCodeComparer();
distinctCountries = CityObjectList.Select(c => c.Region.Country).Distinct(comparer).ToList();

关于c# - 使用 Lambda 获取不同的父项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com