我在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中使用百分号的等价是什么?


当前回答

Contains在Linq中使用,就像like在SQL中使用一样。

string _search="/12/";

……

.Where(s => s.Hierarchy.Contains(_search))

你可以像下面这样在Linq中编写SQL脚本:

 var result= Organizations.Join(OrganizationsHierarchy.Where(s=>s.Hierarchy.Contains("/12/")),s=>s.Id,s=>s.OrganizationsId,(org,orgH)=>new {org,orgH});

其他回答

indexOf也适用于我

var result = from c in SampleList
where c.LongName.IndexOf(SearchQuery) >= 0
select c;

如果你使用VB。NET,那么答案将是“*”。这是你的where从句的样子…

Where OH.Hierarchy Like '*/12/*'

备注:“*”匹配零个或多个字符。下面是关于Like操作符的msdn文章。

我总是这样做:

from h in OH
where h.Hierarchy.Contains("/12/")
select h

我知道我不使用like语句,但它在后台工作很好,这是翻译成一个查询与like语句。

System.Data.Linq.SqlClient.SqlMethods.Like("mystring", "%string")

试试这个,我觉得挺好的

from record in context.Organization where record.Hierarchy.Contains(12) select record;