我在SQL中有一个程序,我试图变成Linq:
SELECT O.Id, O.Name as Organization
FROM Organizations O
JOIN OrganizationsHierarchy OH ON O.Id=OH.OrganizationsId
where OH.Hierarchy like '%/12/%'
我最关心的是:
where OH.Hierarchy like '%/12/%'
我有一个存储层的列,例如/ 1/3/12,所以我只使用%/ 12 /%来搜索它 .
我的问题是,Linq或.NET相当于使用百分号?
13 回答
试试这个,这对我来说很好
我总是这样做:
我知道我不使用like语句,但它在后台工作正常,这被翻译成一个类似语句的查询 .
您也可以使用
.StartsWith()
或.EndsWith()
.用这个:
我假设您正在使用Linq-to-SQL *(请参阅下面的注释) . 如果是这样,请使用string.Contains,string.StartsWith和string.EndsWith生成使用SQL LIKE运算符的SQL .
要么
Note: * =如果您在.net 3.5中使用ADO.Net实体框架(EF / L2E),请注意它不会执行与Linq-to-SQL相同的转换 . 尽管L2S进行了正确的转换,但L2E v1(3.5)将转换为t-sql表达式,该表达式将强制对您要查询的表进行全表扫描,除非在您的where子句或连接过滤器中有另一个更好的鉴别器 .
Update: 这已在EF / L2E v4(.net 4.0)中修复,因此它将像L2S一样生成SQL LIKE .
如果您使用的是VB.NET,那么答案就是“*” . 这是你的where子句的样子......
注意:"*"匹配零个或多个字符 . Here is the msdn article for the Like operator .
那么indexOf也适合我
使用这样的代码
如果你不匹配数字字符串,总是有一个常见的情况:
包含在Linq中使用,就像在SQL中使用Like一样 .
. . .
您可以在Linq中编写SQL脚本,如下所示:
对于那些像我一样在LINQ中寻找“SQL Like”方法的方式,我有一些非常好的东西 .
我遇到的情况是我无法以任何方式更改数据库以更改列排序规则 . 所以我要在LINQ中找到一种方法来做到这一点 .
我正在使用辅助方法 SqlFunctions.PatIndex witch act与真正的SQL LIKE运算符类似 .
首先,我需要在搜索值中枚举所有可能的变音符号(我刚刚学到的一个词),以获得类似于:
然后在LINQ中例如:
所以根据我的需要,我编写了一个Helper / Extension方法
如果你们有任何建议要加强这种方法,我会很高兴听到你的意见 .
.NET核心现在有
EF.Functions.Like