2010-10-19 73 views
5

我有一个名为“Orders”的类,其中包含“City”的属性。 我正在尝试编写一个LINQ语句,它将从命令列表中获取所有不同的城市,并将它们作为字符串列表返回。帮助LINQ distinct()

这是我现在拥有的。

public List<string> GetOrderCities(List<Order> orders) 
{ 
    IEnumerable<string> cities= from o in orders 
           select o.City.Distinct().ToString(); 

    return cities.ToList(); 

} 

但是,当我通过传递一个订单列表来运行它时,我似乎没有得到任何回报。该列表是空的,它返回。我通过它的订单都有城市价值。 我是不是在做这个错误? 谢谢!

回答

12

您错误地调用了Distinct()方法。

将其更改为

return orders.Select(o => o.City).Distinct().ToList(); 

或者,使用查询理解语法:

return (from o in orders 
     select o.City 
     ).Distinct().ToList(); 

(注括号)

您的代码在City属性本身,这是一个字符串调用Distinct
由于String类实现IEnumerable<char>,此方法返回一个IEnumerable<char>包含字符串中的所有唯一字符
然后您可以在此枚举(这是一个由System.Core.dll编译器生成的迭代器类型)上调用ToString(),该枚举始终返回System.Linq.Enumerable+d__81`1[System.Char]

取而代之,您需要拨打.Distinct()IEnumerable<string>Select方法返回。

+0

糟糕,不知道如何多余的C在那里。这只是一个错误的帖子。代码是select s.City.Distinct()。ToString(); – twal 2010-10-19 17:17:58

+0

好吧,我想我明白了。谢谢。我会做出改变并给它一个机会。谢谢 – twal 2010-10-19 17:19:19

+0

完美!我感谢你! – twal 2010-10-19 17:23:00

1

您可以坚持小调整的方式进行呼叫......您需要包裹选择区域,然后呼叫Distinct(),然后将其推送到List

List<string> cities = (from o in orders 
         select o.City).Distinct().ToList(); 

      return cities;