C# 具有2个多对多关系的Linq select in列表
我有以下数据库结构: 用户[USER\u client]客户端[client\u application]应用 用户、客户端和应用程序表包含唯一键。用户客户端和客户端应用程序是多对多表,用于将用户映射到客户端,将客户端映射到应用程序 我使用的是MVC5/C。实体框架将多对多表隐藏在我的模型中 我想要实现的是:对于一个给定的用户,它有一个客户机列表,得到他所有客户机拥有的不同应用程序的组合列表 你能帮我解释一下逻辑和Linq查询吗(如果可能的话,最好用流利的语法)?是否可以在一个查询中完成此操作,而无需在客户端列表中循环 先谢谢你C# 具有2个多对多关系的Linq select in列表,c#,asp.net-mvc,linq,entity-framework,C#,Asp.net Mvc,Linq,Entity Framework,我有以下数据库结构: 用户[USER\u client]客户端[client\u application]应用 用户、客户端和应用程序表包含唯一键。用户客户端和客户端应用程序是多对多表,用于将用户映射到客户端,将客户端映射到应用程序 我使用的是MVC5/C。实体框架将多对多表隐藏在我的模型中 我想要实现的是:对于一个给定的用户,它有一个客户机列表,得到他所有客户机拥有的不同应用程序的组合列表 你能帮我解释一下逻辑和Linq查询吗(如果可能的话,最好用流利的语法)?是否可以在一个查询中完成此操作,
Reda不确定它是否与您的模式匹配,但如何
user.clients.SelectMany(c => c.applications).Distinct()
关键是使用SelectMany而不是Select,这将为您提供一个
IEnumerable
而不是IEnumerable
还有,这可能是一个lambda表达式,也可能缺少
Distinct()
,但这是所有用户都拥有的应用程序列表吗?我现在看到的是至少有一个用户拥有的应用程序列表。@tafia这是真的,修复了GroupBy的问题,因为我不确定Distinct的行为(即使它是同一条记录,也可能是另一个对象)GroupBy
和Distinct
都将使用IEqualityComparer
。我真的看不出这种差异是完美的。非常感谢。
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());