【问题标题】:Linq to Entities - Get list of all unique related entitiesLinq to Entities - 获取所有唯一相关实体的列表
【发布时间】:2013-06-07 12:15:17
【问题描述】:

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

我有一个 Place 模型:

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”标签。

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

我如何在 Linq 中做到这一点?

谢谢。

【问题讨论】:

  • 你想要标签对象还是标签名称?

标签: asp.net-mvc linq asp.net-mvc-4 linq-to-entities sql-server-2012-express


【解决方案1】:

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

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();

【讨论】:

  • 谢谢 - 收到此错误:传入字典的模型项的类型为 'System.Linq.Enumerable+d__811[myapp.Models.Tag]', but this dictionary requires a model item of type 'System.Collections.Generic.List1[myapp.Models.Tag]'。
猜你喜欢
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
相关资源
最近更新 更多