Linq在列表中选择2个多对多关系

时间:2015-08-12 06:53:03

标签: c# asp.net-mvc linq entity-framework

我有以下数据库结构:

USER < - > [user_client]< - > 客户< - > [client_application]< - >的应用

USER,CLIENT和APPLICATION表包含唯一键。 user_client和client_application是多对多表,用于将USER映射到CLIENT和CLIENT到APP。

我正在使用MVC5 / C#。实体框架将多对多表隐藏在我的模型中。

我想要实现的目标如下:对于具有CLIENT列表的给定USER,获取其所有CLIENT所具有的不同APPLICATION的组合列表。

您能否帮助解决逻辑和Linq查询(如果可能,最好用流利的语法)?是否可以在单个查询中执行此操作而不循环访问客户端列表?

提前谢谢。

Reda的

2 个答案:

答案 0 :(得分:1)

不确定它是否与您的架构匹配,但

是什么
user.clients.SelectMany(c => c.applications).Distinct()

答案 1 :(得分:1)

关键是使用SelectMany代替Select,它会为您提供IEnuerable<Application>而不是IEnumerable<IEnumerable<Application>>

var user = context.Users.Where(u => u.Id == 1).Single();
var applications = user.Clients
    .SelectMany(c => c.Application)
    .GroupBy(a = a.Id)
    .Select(a => a.First());