C# 当连接条件为like时,如何在EF中进行连接

C# 当连接条件为like时,如何在EF中进行连接,c#,entity-framework,tsql,C#,Entity Framework,Tsql,我想将下面的SQL查询转换为EF Linq查询,但我不知道如何编写“like”部分 上述查询的示例结果 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,

我想将下面的SQL查询转换为EF Linq查询,但我不知道如何编写“like”部分

上述查询的示例结果

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,

为了澄清,我想知道如何执行联接的类似部分,我知道在WHERE子句中我可以使用contains,但对于联接,我找到的每个示例都只使用equality,f.eks:

在Linq中使用联接时,您只能使用equals运算符,下面是一个可能的解决方法

假设您的
DbContext
被称为db:

var result = from people in db.People
             from departmentWithChildren in db.DepartmentsWithChildren
             join departmentPerson in db.DepartmentPersons 
                             on people.Id equals departmentPerson.Person_Id
              where departmentWithChildren.Any(d => d.lvl.Contains("," + 
                             departmentPerson.Deparment_Id + ",")) &&
                             people.UserId = "01cb89b4-9f81-4012-a4d9-5a38468a7433"
              select departmentWithChildren;

一个简单的好方法是使用两个linq查询

var dict = from row in entities.departments where yada yada select row.Id;

var query = from row in entities.departmentpersons where
            dict.Contains(row.departmentId)
            select row;

问题是如何在联接中执行此操作,而不是如何编写like查询。不,我是问如何执行like联接,而不是like查询最终放弃联接,只使用2个FROM子句,第二个上的WHERE子句引用第一个。我认为这在EFYeah中被称为左外连接,我也打算这样做,但它会生成一个效率稍低的查询。如果您没有数百万条记录,这并不重要;)谢谢。
,67,27,3,1,
到底是什么意思?数据库中的CSV数据通常是一件坏事。lvl由视图查询生成,是以逗号分隔的所有部门和父部门的列表。因此,在这个列表中,171部门有4个上级部门(67、27、3、1),一个可能的替代方法是有一个单独的表。让我们称之为
multi-levelparents
。它将有三列-
Id
AncestorDepartmentId
Generation
。而不是拥有
67,27,3,1
lvl
值,你将在
MultiLevelParents
中拥有四个值-第一个是
171
67
1
1
4
@mjwills,如果我愿意改变,这是一种方法数据库。我也可以简单地使用上面的查询作为视图,并从中进行选择。我想问的是,这是否可以在中国实现EF@lsma我知道如何在SQL中做到这一点,但我真的不知道从哪里开始如何在EF中做到这一点,这就是为什么没有示例的原因
var dict = from row in entities.departments where yada yada select row.Id;

var query = from row in entities.departmentpersons where
            dict.Contains(row.departmentId)
            select row;