Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有2个多对多关系的Linq select in列表_C#_Asp.net Mvc_Linq_Entity Framework - Fatal编程技术网

C# 具有2个多对多关系的Linq select in列表

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查询吗(如果可能的话,最好用流利的语法)?是否可以在一个查询中完成此操作,

我有以下数据库结构:

用户[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());