0

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 virtual int TagID { get; set; }
public virtual string Name { get; set; }
public virtual string NamePlural { get; set; }
public virtual ICollection<Place> Places { get; set; }

他们有一个多对多的关系。

我有一个 List places - 我想创建一个 List 标签 - 填充了与“places”中的每个地方相关联的每个(唯一)标签。

例如,一个地方可能有“restaurant”和“pub”标签,另一个有“pub”和“bar”标签,另一个有“shop”和“cafe”标签。

我希望列表包含具有以下名称的每个标签之一:Bar、Cafe、Restaurant、Pub、Shop

我怎样才能在 Linq 中做到这一点?

谢谢。

4

1 回答 1

0

如果您想要所有唯一的标签名称,您可以这样做:

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()到然后结束以将结果转换为列表。

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();
于 2013-06-07T12:22:10.100 回答