是否可以构建包含通配符的有效 Linq 查询?
我看过这个问题的各种答案,建议使用:
.Where(entity => entity.Name.Contains("FooBar"))
.Where(entity => entity.Name.EndsWith("Bar"))
.Where(entity => entity.Name.StartsWith("Foo"))
或者构建 RawSql:
var commandText =
@"SELECT field
FROM table
WHERE field LIKE @search";
var query = new ObjectQuery<Profile>(commandText, context);
query.Parameters.Add(new ObjectParameter("search", wildcardSearch));
如果通配符不在字符串的开头或结尾,第一个解决方案将不起作用,例如,searchTerm = "Foo%Bar"
.
第二种解决方案,使用 RawSql,不适合我,感觉像是一种廉价的出路。但它确实有效。
我尚未尝试的第三个选项是创建一些可以解析搜索词并构建有效的 Linq 查询的东西,这是 @Slauma 在下面的链接 2 中尝试过的。但如果通配符不在搜索词的开头或结尾,这仍然不起作用。
所以问题是:是否可以构造一个包含通配符的有效 Linq 查询?
编辑:
值得一提的是,在本例中我使用 Oracle 数据访问组件 (ODAC/ODP),但我认为在本例中这没有多大区别。
links:
1.实体框架中的“like”查询
2.以搜索词为条件的精确搜索和通配符搜索
3.使用RawSql
如果您使用 EDMX 文件作为实体模型的基础,那么也许您可以尝试创建一个概念模型功能然后在 SQL 中执行 LIKE。我不确定这是否适用于 Oracle。然后您应该能够执行如下操作:
.Where(entity => Like(entity.Name, "Foo%Bar"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)