bri*_*ien 83 .net sql-server linq-to-entities entity-framework
我们正在尝试在实体框架中为包含字符串字段的实体实现"LIKE"运算符,但似乎不支持它.有没有其他人试图做这样的事情?
这篇博客文章总结了我们遇到的问题.我们可以使用contains,但这只匹配LIKE的最简单的情况.组合contains,startswith,endswith和indexof将我们带到那里,但需要在标准通配符和Linq to Entities代码之间进行转换.
Jon*_*eet 148
我真的对EF一无所知,但在LINQ to SQL中,你通常使用String.Contains表达一个LIKE子句:
where entity.Name.Contains("xyz")
Run Code Online (Sandbox Code Playgroud)
翻译成
WHERE Name LIKE '%xyz%'
Run Code Online (Sandbox Code Playgroud)
(使用StartsWith和EndsWith其他行为.)
我不完全确定这是否有用,因为当你说你试图实现 LIKE 时,我不明白你的意思.如果我完全误解了,请告诉我,我会删除这个答案:)
sur*_*fen 33
我有同样的问题.
目前,我已经确定了基于http://www.codeproject.com/Articles/11556/Converting-Wildcards-to-Regexes?msg=1423024#xx1423024xx的客户端通配符/正则表达式过滤- 它很简单并且可以用作预期.
我发现了关于这个主题的另一个讨论:http://forums.asp.net/t/1654093.aspx/2/10
如果您使用实体框架> = 4.0,这篇文章看起来很有希望:
使用SqlFunctions.PatIndex:
http://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions.patindex.aspx
像这样:
Run Code Online (Sandbox Code Playgroud)var q = EFContext.Products.Where(x => SqlFunctions.PatIndex("%CD%BLUE%", x.ProductName) > 0);
注意:此解决方案仅适用于SQL-Server,因为它使用非标准PATINDEX函数.
Yan*_*ran 31
这是一个旧帖子,但对于任何寻找答案的人来说,这个链接应该有所帮助.
精简版:
SqlFunctions.PatIndex方法 - 在所有有效的文本和字符数据类型上返回指定表达式中第一次出现模式的起始位置,如果未找到模式则返回零
命名空间:System.Data.Objects.SqlClient程序集:System.Data.Entity(在System.Data.Entity.dll中)
此论坛帖子中也会出现一些解释.
Dmi*_*lov 18
有LIKE添加运算符Entity Framework Core 2.0:
var query = from e in _context.Employees
where EF.Functions.Like(e.Title, "%developer%")
select e;
Run Code Online (Sandbox Code Playgroud)
与... where e.Title.Contains("developer") ...它相比,它实际上是转化为SQL LIKE而不是CHARINDEX我们看到的Contains方法.
Lod*_*nck 16
更新:在EF 6.2中有一个类似的运算符
Where(i => DbFunctions.Like(searchstring ,like expression)
Run Code Online (Sandbox Code Playgroud)
小智 6
对于 EfCore,这里是构建 LIKE 表达式的示例
protected override Expression<Func<YourEntiry, bool>> BuildLikeExpression(string searchText)
{
var likeSearch = $"%{searchText}%";
return t => EF.Functions.Like(t.Code, likeSearch)
|| EF.Functions.Like(t.FirstName, likeSearch)
|| EF.Functions.Like(t.LastName, likeSearch);
}
//Calling method
var query = dbContext.Set<YourEntity>().Where(BuildLikeExpression("Text"));
Run Code Online (Sandbox Code Playgroud)
它在文档中作为Entity SQL的一部分特别提到.您收到错误消息了吗?
// LIKE and ESCAPE
// If an AdventureWorksEntities.Product contained a Name
// with the value 'Down_Tube', the following query would find that
// value.
Select value P.Name FROM AdventureWorksEntities.Product
as P where P.Name LIKE 'DownA_%' ESCAPE 'A'
// LIKE
Select value P.Name FROM AdventureWorksEntities.Product
as P where P.Name like 'BB%'
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/bb399359.aspx
| 归档时间: |
|
| 查看次数: |
104043 次 |
| 最近记录: |