实体框架V4.1 LIKE [英] Entity Framework v4.1 LIKE

查看:141
本文介绍了实体框架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,实体框架4.1版和C#。

I'm using .Net Framework 4.0, Entity Framework v4.1 and C#.

EF 4.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到实体是不是能够做到这一点,EFv4.1 code第一(不EDMX)<一href="http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/39b8d6cd-5c77-40e4-abf3-d620c79b8ff2">doesn't有支持定义的模型函数中如此由@Johann布莱提供的解决方案不能被使用。

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.

我猜code运行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 LIKE的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆