LINQ中导致错误的条款

时间:2017-03-10 23:57:19

标签: c# linq

我正在尝试根据可能包含空格的搜索字词返回行。

以下代码产生以下错误。我无法弄清楚我做错了什么,有什么建议吗?

  

本地序列不能用于查询的LINQ to SQL实现   除Contains运算符之外的运算符。

var searchTerms = term.Split(' ').ToList();
var surveys = (from s in dc.BasicNeedsSurveys where s.Hidden == 
false orderby s.CreatedOn descending select s)
.Where(x => searchTerms.Any(y => y.Contains(x.FirstName)) 
|| searchTerms.Any(y => y.Contains(x.LastName)) 
|| searchTerms.Any(y => y.Contains(x.FEMANumber)));

1 个答案:

答案 0 :(得分:2)

根据您使用linq to sql(或EF)的错误消息。 linq to sql在场景后面生成SQL查询,而你无法在sql查询中使用本地var如searchTerms。如果我理解正确并且dc.BasicNeedsSurveys实际上是一个数据库实体(例如在实体框架中),您的解决方案将首先执行sql查询,然后在搜索项的子字符串包含搜索结果时运行测试。 ToList是一个可以做到这一点的功能。

var searchTerms = term.Split(' ').ToList();
var surveys = (from s in dc.BasicNeedsSurveys where s.Hidden == 
false orderby s.CreatedOn descending select s)
.ToList()
.Where(x => searchTerms.Any(y => y.Contains(x.FirstName)) 
|| searchTerms.Any(y => y.Contains(x.LastName)) 
|| searchTerms.Any(y => y.Contains(x.FEMANumber)));

当然,可能有更好的方法可以通过更好的性能来实现这一点,因为只有在您从硬盘驱动器中读取所有结果后才会过滤结果,但问题中的信息确实不够