c# - 如何在 Fluent LINQ 中使用 or 子句进行连接

标签 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.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 };

关于c# - 如何在 Fluent LINQ 中使用 or 子句进行连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22868709/

相关文章:

c# - 如何在异步场景中测试 Rx observable?

c# - Linq to SQL - 我应该如何管理数据库请求?

c# - 访问 Linq 查询的基本列表

c# - 投影 : filling 2 arrays at once

c# - 如何知道我的 linq 查询是否返回 null

c# - 编译器错误消息 : CS0246: when I renamed my project

javascript - 在 Windows 10 通用应用程序中从 JavaScript 调用 C# 组件

c# - 在 native iOS/Android 应用程序中使用 Xamarin 库

c# - linq 不区分大小写和修剪比较

C# dbml 文件从哪里来?