使用LINQ的distinct()方法需要帮助

7

我有一个名为“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();

}

然而,当我通过传递一个订单列表来运行它时,似乎什么也没得到。它返回的是空列表。我传递的所有订单都有城市值。 我是不是做错了什么? 谢谢!

2个回答

15

你误称了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>类型。
然后你在这个可枚举对象上调用ToString()(这是System.Core.dll中编译器生成的迭代器类型),它总是返回System.Linq.Enumerable+d__81`1[System.Char]

相反,你需要在Select方法返回的IEnumerable<string>上调用.Distinct()方法。


哎呀,不确定那个额外的C是怎么进去的。这只是帖子上的一个打字错误。代码应该是select s.City.Distinct().ToString(); - twal
好的,我想我明白了。谢谢你。我会进行更改并尝试一下。谢谢。 - twal

1

你可以继续使用你正在进行的调用方式,只需进行一些小的调整...如果你需要包装选择区域,然后在其上调用Distinct(),最后将其推入一个List中。

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

            return cities;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接