2010-10-19 65 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;