Asp.net mvc Linq to实体-获取所有唯一相关实体的列表

Asp.net mvc Linq to实体-获取所有唯一相关实体的列表,asp.net-mvc,linq,asp.net-mvc-4,linq-to-entities,sql-server-2012-express,Asp.net Mvc,Linq,Asp.net Mvc 4,Linq To Entities,Sql Server 2012 Express,asp.net mvc 4,实体框架5,SQL Server 2012 Express,代码优先 我有一个地方模型: public virtual int PlaceID { get; set; } public virtual ICollection<Tag> Tags { get; set; } public virtual string Name { get; set; } public-virtualint-PlaceID{get;set;} 公共虚拟ICollection

asp.net mvc 4,实体框架5,SQL Server 2012 Express,代码优先

我有一个地方模型:

public virtual int PlaceID { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public virtual string Name { get; set; }
public-virtualint-PlaceID{get;set;}
公共虚拟ICollection标记{get;set;}
公共虚拟字符串名称{get;set;}
以及相关的标签模型:

public virtual int TagID { get; set; }
public virtual string Name { get; set; }
public virtual string NamePlural { get; set; }
public virtual ICollection<Place> Places { get; set; }
public-virtual-int-TagID{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟字符串名称复数{get;set;}
公共虚拟ICollection位置{get;set;}
他们有一种多对多的关系

我有一个位置列表-我想创建一个列表标记-填充与“位置”中每个位置相关联的每个(唯一)标记

例如,一个地方可能有“餐厅”和“酒吧”标签,另一个地方可能有“酒吧”和“酒吧”,另一个地方可能有“商店”和“咖啡馆”

我希望列表中包含以下名称的每个标签中的一个: 酒吧、咖啡馆、餐厅、酒吧、商店

在林克我该怎么做


谢谢。

如果您想要所有唯一的标记名,请执行以下操作:

places.SelectMany(x => x.Tags).Select(x => x.Name).Distinct()
如果同一标记的两个实例是同一个对象,那么您就可以这样做

places.SelectMany(x => x.Tags).Distinct();
如果它们是不同的对象,那么您可以这样做

places.SelectMany(x => x.Tags).GroupBy(x => x.TagId).Select(g => g.First());
新评论后更新

ToList()
添加到end,然后将结果转换为列表

places.SelectMany(x => x.Tags).Select(x => x.Name).Distinct().ToList();
places.SelectMany(x => x.Tags).Distinct().ToList();
places.SelectMany(x => x.Tags).GroupBy(x => x.TagId).Select(g => g.First()).ToList();

您想要标记对象还是标记的名称?谢谢-收到此错误:传入字典的模型项的类型为“System.Linq.Enumerable+d_u81
1[myapp.Models.tag]”,但此字典需要类型为“System.Collections.Generic.List
1[myapp.Models.tag]”的模型项。