我在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/%'
Run Code Online (Sandbox Code Playgroud)
我最关心的是:
where OH.Hierarchy like '%/12/%'
Run Code Online (Sandbox Code Playgroud)
我有一个存储层的列,例如/ 1/3/12,所以我只使用%/ 12 /%来搜索它.
我的问题是,Linq或.NET相当于使用百分号?
我们正在尝试在实体框架中为包含字符串字段的实体实现"LIKE"运算符,但似乎不支持它.有没有其他人试图做这样的事情?
这篇博客文章总结了我们遇到的问题.我们可以使用contains,但这只匹配LIKE的最简单的情况.组合contains,startswith,endswith和indexof将我们带到那里,但需要在标准通配符和Linq to Entities代码之间进行转换.
我想搜索一下:
Post Cereal
Run Code Online (Sandbox Code Playgroud)
得到这个:
Post Honey Nut Cereal
Run Code Online (Sandbox Code Playgroud)
那里的外卡是空格.
我知道我可以为每个术语做一个SPLIT和一系列ANDs和Contains()并转换为Linq Expression作为规范对象,但是在发送给SQL的术语中是不是有办法表示通配符?我查看了Linq to SQL中的SQL函数,但我不确定它在Linq to Entities中是什么.
我想做这样的事情:
term = '%' + term.Replace(' ', '%') + '%';
db.table.where( p => System.Data.Objects.SqlClient.SqlFunctions
.SqlMethods.Like(p.fieldname, term) );
Run Code Online (Sandbox Code Playgroud)
有什么建议?
如何构建我的查询以产生输出SQL查询,如:
SELECT
[viewRegisters].[Id] AS [IdRegister]
WHERE Name LIKE '%a%bc'
Run Code Online (Sandbox Code Playgroud)
要么
SELECT
[viewRegisters].[Id] AS [IdRegister]
WHERE Name LIKE 'a%b%c'
Run Code Online (Sandbox Code Playgroud)
要么
SELECT
[viewRegisters].[Id] AS [IdRegister]
WHERE Name LIKE 'a%b%c%'
Run Code Online (Sandbox Code Playgroud)
我正在使用.Net Framework 4.0,Entity Framework v4.1和C#.
EF v4.1转换此类型的linq查询:
((IQueryable<T>)Data).Where(z => z.Field.Contains("a%b%c%"));
Run Code Online (Sandbox Code Playgroud)
成:
SELECT
[viewRegisters].[Id] AS [Id]
WHERE Name LIKE N'a~%b~%c~%' ESCAPE N'~'
Run Code Online (Sandbox Code Playgroud)
那不是我想要的.我希望能够像在DB中直接使用"百分比"符号一样.
我正在使用Visual Studio 2010 RC for .NET 4.0,我试图找出如何与Entity Framework进行通配符比较.
我想对EF进行以下查询,我找到所有以'J'开头的名字
select * from Users where FirstName like 'J%'
Run Code Online (Sandbox Code Playgroud)