EF取代'包含'运营商与' charindex' in raw sql

时间:2016-11-06 19:30:44

标签: c# entity-framework entity-framework-6 full-text-search

因为EF不支持开箱即用的全文搜索(据我所知)使用sql命令执行查询

var objctx = (ctx as System.Data.Entity.Infrastructure.IObjectContextAdapter).ObjectContext;
                        query = objctx.CreateQuery<Candidate>(@"select 
                            c.CandidateId,
                            c.ProjectId,
                            c.CreateDate,
                            c.CreatedBy
                            c.DisplayName
                            from candidate as c
                        where (contains(c.DisplayName, @pattern))",
                            new ObjectParameter("pattern", displayNameFilter));

问题来自我甚至无法想象的地方。 EF,形成最终请求,用contains函数包装替换运算符charindex(),以及case-when-bit-convert构造。

怎么办?如何强制EF离开contains而不被重写?

1 个答案:

答案 0 :(得分:1)

var query = @"select c.CandidateId,c.ProjectId, c.CreateDate, c.CreatedBy c.DisplayName from candidate as c where (contains(c.DisplayName, @p0))";
var result = dbContext.Database.SqlQuery<T>(query, displayNameFilter).ToList();

T是您的结果类型。

SqlQuery()docs:https://msdn.microsoft.com/en-us/library/jj592907%28v=vs.113%29.aspx