Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 如何在Fluent LINQ中连接or子句_C#_Linq - Fatal编程技术网

C# 如何在Fluent LINQ中连接or子句

C# 如何在Fluent LINQ中连接or子句,c#,linq,C#,Linq,我正试图把两张桌子连接起来 TSQL将是: SELECT * FROM User u INNER JOIN Hierarchy h ON u.OrganisationId = h.OrganisationId OR u.OrganisationId = h.OwnerOrganisationId 我已经搜索过了,没有人能用流利的语言回答这个问题。我能想到的最接近的是: var join1 = context.User.Join(context.Hierarchy, u => u

我正试图把两张桌子连接起来

TSQL将是:

SELECT * 
FROM User u INNER JOIN Hierarchy h ON u.OrganisationId = h.OrganisationId 
   OR u.OrganisationId = h.OwnerOrganisationId
我已经搜索过了,没有人能用流利的语言回答这个问题。我能想到的最接近的是:

var join1 = context.User.Join(context.Hierarchy, u => u.OrganisationId, h => h.OrganisationId, uh => new {u, h});
var join2 = context.User.Join(context.Hierarchy, u => u.OrganisationId, h => h.OwnerOrganisationId, uh => new {u, h});
var desiredResult = join1.Union(join2);

但这似乎效率很低。

语法流畅

var orJoin = context.User.SelectMany(
                u => context.Hierarchy.Where(h => u.OrganisationId == h.OrganisationId || u.OrganisationId == h.OwnerOrganisationId),
                (u, h) => new { u, h }
             );
var orJoin = from u in context.User
             from h in context.Hierarchy
             where u.OrganisationId == h.OrganisationId || u.OrganisationId == h.OwnerOrganisationId
             select new { u, h };

查询语法

var orJoin = context.User.SelectMany(
                u => context.Hierarchy.Where(h => u.OrganisationId == h.OrganisationId || u.OrganisationId == h.OwnerOrganisationId),
                (u, h) => new { u, h }
             );
var orJoin = from u in context.User
             from h in context.Hierarchy
             where u.OrganisationId == h.OrganisationId || u.OrganisationId == h.OwnerOrganisationId
             select new { u, h };

您看过优化的执行计划了吗?我想知道where子句中交叉连接和筛选的执行计划是什么样子的。谢谢,很抱歉回复太晚。这不是一个直接的解决方案,但帮助我自己解决了具体问题。