我有以下数据库结构:
USER < - > [user_client]< - > 客户< - > [client_application]< - >的应用
USER,CLIENT和APPLICATION表包含唯一键。 user_client和client_application是多对多表,用于将USER映射到CLIENT和CLIENT到APP。
我正在使用MVC5 / C#。实体框架将多对多表隐藏在我的模型中。
我想要实现的目标如下:对于具有CLIENT列表的给定USER,获取其所有CLIENT所具有的不同APPLICATION的组合列表。
您能否帮助解决逻辑和Linq查询(如果可能,最好用流利的语法)?是否可以在单个查询中执行此操作而不循环访问客户端列表?
提前谢谢。
Reda的
答案 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());