选择不同于List <string> </string>的属性

时间:2014-02-14 10:27:52

标签: linq c#-4.0

我有一个资产的通用列表(List<Asset>),其中一个资产属性叫做Tags,它是一个字符串列表

如何进行Linq查询以获取不同的标记列表。我试过了

assetList.Select(a => a.Tags).Distinct() 

但这会返回IEnumerable<List<string>>而不是IEnumerable<string>

3 个答案:

答案 0 :(得分:1)

你很亲密。您需要使用Enumerable.SelectMany选择所有标记并将其展平为一个序列:

assetList.SelectMany(a => a.Tags).Distinct() 

答案 1 :(得分:0)

assetList.SelecMany(a => a.Tags).Distinct() . correct it

有关差异的更多信息Difference Between Select and SelectMany

答案 2 :(得分:0)

Select只会按原样获取对象,而Tags是一个列表,因此需要列表。如果您需要这些列表中的项目,则必须将它们展平为一个列表,然后继续执行其他操作。

assetList.SelectMany(a => a.Tags).Distinct();

来自SelectMany

MSDN的一个很好的例子
PetOwner[] petOwners = 
                { new PetOwner { Name="Higa, Sidney", 
                      Pets = new List<string>{ "Scruffy", "Sam" } },
                  new PetOwner { Name="Ashkenazi, Ronen", 
                      Pets = new List<string>{ "Walker", "Sugar" } },
                  new PetOwner { Name="Price, Vernette", 
                      Pets = new List<string>{ "Scratches", "Diesel" } } };

IEnumerable<string> query1 = petOwners.SelectMany(petOwner => petOwner.Pets);

生成以下列表

  

Scruffy,Sam,Walker,Sugar,Scratches,Diesel