【发布时间】:2018-06-25 11:02:30
【问题描述】:
我有以下 SQL 查询,我想将其转换为 EF Linq 查询,但我不知道如何编写“like”部分。
SELECT DepartmentsWithChildren.*
FROM dbo.People
INNER JOIN dbo.DepartmentPersons
ON DepartmentPersons.Person_Id = People.Id
INNER JOIN dbo.DepartmentsWithChildren
ON DepartmentsWithChildren.lvl LIKE '%,' + CAST(DepartmentPersons.Department_Id AS VARCHAR(50)) + ',%'
WHERE UserId = '01cb89b4-9f81-4012-a4d9-5a38468a7433'
上述查询的示例结果
Id ParentDepartmentId lvl
58 27 ,27,3,1,
64 27 ,27,3,1,
67 27 ,27,3,1,
77 27 ,27,3,1,
90 27 ,27,3,1,
93 27 ,27,3,1,
100 27 ,27,3,1,
102 27 ,27,3,1,
106 27 ,27,3,1,
134 27 ,27,3,1,
137 27 ,27,3,1,
396 27 ,27,3,1,
414 27 ,27,3,1,
171 67 ,67,27,3,1,
206 67 ,67,27,3,1,
219 67 ,67,27,3,1,
为了澄清,我想知道如何做一个 JOIN 的 LIKE 部分,我知道在 WHERE 子句中我可以使用包含,但是对于 JOINS,我发现的每个示例都只使用相等,f.eks: How to join tables in EF LINQ
【问题讨论】:
-
,67,27,3,1,到底是什么意思? 数据库中的 CSV 数据通常是一件坏事。 -
lvl 由视图查询生成,是所有部门父部门的逗号分隔列表。所以在这个列表部门 171 中,有 4 个父部门 (67,27,3,1)
-
另一种可能的方法是使用单独的表。我们称之为
MultiLevelParents。它将包含三列 -Id、AncestorDepartmentId、Generation。而不是拥有67,27,3,1的lvl值,而是MultiLevelParents中的四个值 - 第一个是171和67和1,最后一个是171和1和@ 987654337@. -
@mjwills 如果我愿意更改数据库,这是一种方法。我也可以简单地将上述查询用作视图并从中进行选择。我要问的是是否可以在 EF 中做到这一点
-
@lsma 我知道如何在 SQL 中执行此操作,但我真的不知道如何在 EF 中执行此操作,这就是为什么没有示例
标签: c# entity-framework tsql