所以,我有这个lambda表达式,它可以正常工作
list = list.Where(x => x.ListaDocumentoCaixa.Any(d => d.Observacao.Contains(term.Trim())));
我必须补充一点,此列是varchar(6000)
字段。到目前为止,正如我所提到的那样,这已经很好了,但就在最近我遇到了一个问题。似乎如果搜索的术语发生在字符串的位置4001并且打开,则查询无法向我返回任何内容。
经过一些重新调整后,我发现这是对实体框架生成的查询的评论
-- p__linq__0: 'maria stela gonsa' (Type = String, Size = 4000)
经过一些研究后我发现这是实体的常见行为,但是,我不能对应用程序有这种限制。我的问题是:有没有办法改变这种行为?我非常希望避免将此查询编写为纯文本,并尽可能使用ExecuteQuery
运行。
提前感谢您的帮助!
答案 0 :(得分:0)
我建议你按照下面的文章,假设你正在使用SQL服务器,关于如何创建全文搜索索引,并在带有C#的实体框架中使用它。
运行LIKE语句(这是Contains()映射到的)在大型varchar字段上效率很低。
编辑:链接摘要是:
1。)使用SQL server的向导在字段上创建全文索引。该全文字段将允许CONTAINS和FREETEXT搜索整个字段,并且效率更高。
2。)编写一个存储过程,将有问题的表连接到自由文本索引的结果。
3。)创建一个Entity Framework类来表示该存储过程的结果,并使用EF调用并返回这些结果的列表。