我有一个名为“Orders”的类,其中包含“City”等属性。 我正在尝试编写一个LINQ语句,它将从一个订单列表中获取所有不同的城市,并将它们作为字符串列表返回。
这就是我现在所拥有的。
public List<string> GetOrderCities(List<Order> orders)
{
IEnumerable<string> cities= from o in orders
select o.City.Distinct().ToString();
return cities.ToList();
}
然而,当我通过传递一个订单列表来运行它时,我似乎没有得到任何回报。该列表为空,表示它正在返回。我传递的订单都有City值。 我是不是真的这么做错了? 谢谢!
答案 0 :(得分:14)
你误导了Distinct()
方法。
将其更改为
return orders.Select(o => o.City).Distinct().ToList();
或者,使用查询理解语法:
return (from o in orders
select o.City
).Distinct().ToList();
(注意括号)
您的代码在Distinct
属性本身上调用City
,这是一个字符串
由于String
类实现了IEnumerable<char>
,因此此方法返回包含字符串中所有唯一字符的IEnumerable<char>
。
然后在此枚举上调用ToString()
(这是System.Core.dll中的编译器生成的迭代器类型),它始终返回System.Linq.Enumerable+d__81`1[System.Char]
。
相反,您需要在.Distinct()
方法返回的IEnumerable<string>
上致电Select
。
答案 1 :(得分:1)
您可以通过微调来坚持拨打电话的方式...您需要打开选择区域,然后在其上调用Distinct()
,然后将其推送到List
List<string> cities = (from o in orders
select o.City).Distinct().ToList();
return cities;