帮助LINQ distinct()

时间:2010-10-19 17:12:19

标签: c# linq

我有一个名为“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值。 我是不是真的这么做错了? 谢谢!

2 个答案:

答案 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;