我在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中使用百分号的等价是什么?
我假设您正在使用Linq-to-SQL*(参见下面的注释)。如果是,使用字符串。包含字符串。StartsWith和字符串。EndsWith生成使用SQL LIKE操作符的SQL。
from o in dc.Organization
join oh in dc.OrganizationsHierarchy on o.Id equals oh.OrganizationsId
where oh.Hierarchy.Contains(@"/12/")
select new { o.Id, o.Name }
or
from o in dc.Organization
where o.OrganizationsHierarchy.Hierarchy.Contains(@"/12/")
select new { o.Id, o.Name }
注意:* =如果您正在使用ADO。Net实体框架(EF / L2E),注意它不会像Linq-to-SQL那样进行相同的转换。尽管L2S进行了适当的转换,但L2E v1(3.5)将转换为一个t-sql表达式,该表达式将强制对您正在查询的表进行全表扫描,除非在where子句或连接筛选器中有其他更好的鉴别器。
更新:在EF/L2E v4 (.net 4.0)中修正了这个问题,所以它会像L2S一样生成一个SQL LIKE。