实体框架 v4.1 喜欢 [英] Entity Framework v4.1 LIKE
问题描述
我必须如何构建我的查询以产生如下输出 SQL 查询:
How do I have to build my query to result in an output SQL query like:
SELECT
[viewRegisters].[Id] AS [IdRegister]
WHERE Name LIKE '%a%bc'
或
SELECT
[viewRegisters].[Id] AS [IdRegister]
WHERE Name LIKE 'a%b%c'
或
SELECT
[viewRegisters].[Id] AS [IdRegister]
WHERE Name LIKE 'a%b%c%'
我使用的是 .Net Framework 4.0、Entity Framework v4.1 和 C#.
I'm using .Net Framework 4.0, Entity Framework v4.1 and C#.
EF v4.1 转换了这种类型的 linq 查询:
EF v4.1 converts this type of linq queries from:
((IQueryable<T>)Data).Where(z => z.Field.Contains("a%b%c%"));
进入:
SELECT
[viewRegisters].[Id] AS [Id]
WHERE Name LIKE N'a~%b~%c~%' ESCAPE N'~'
那不是我想要的.我希望能够像直接在 DB 中那样使用百分比"符号.
That's not what I want. I want to be able to use the 'percent' symbol as I do directly in DB.
推荐答案
您必须使用 ESQL 如果您想要完整的通配符支持.Linq-to-entities 无法做到这一点,EFv4.1 代码首先(没有 EDMX)不支持模型定义函数,因此无法使用@Johann Blais 提供的解决方案.
You must use ESQL if you want full wildcard support. Linq-to-entities is not able to do that and EFv4.1 code first (without EDMX) doesn't have support for model defined functions so the solution provided by @Johann Blais cannot be used.
我猜运行 ESQL 查询的代码可能如下所示:
I guess the code to run ESQL query can look like:
string command = "SELECT VALUE e FROM ContextName.DbSetName AS e WHERE e.Field LIKE 'a%b%c%'"
ObjectContext ctx = ((IObjectContextAdapter)dbContext).ObjectContext;
ObjectQuery<EntityType> query = new ObjectQuery<EntityType>(command, ctx);
ObjectResult<EtntiyType> result = query.Execute(MergeOption.AppendOnly);
这篇关于实体框架 v4.1 喜欢的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!