搜索Linq查询中的任何单词

时间:2013-04-30 10:57:02

标签: asp.net asp.net-mvc linq linq-to-sql

我正在将一个字符串传递给控制器​​,并且需要控制器在我的数据库的Title字段中搜索传递的任何单词。

例如。 id =“outlook error message”

 [HttpPost]
    public JsonResult Lookup(string id)
    {
        List<string> listOfSearch = id.Split(' ').ToList();
        var results = db.KS.Where(x => x.Title.Intersect(listOfSearch).Any());

这会产生以下两个错误:

  

实例参数:无法从'string'转换为'System.Linq.IQueryable<string>

     

'string'不包含'Intersect'的定义,最好的扩展方法重载'System.Linq.Queryable.Intersect<TSource>(System.Linq.IQueryable<TSource>, System.Collections.Generic.IEnumerable<TSource>)'有一些无效的参数

任何人都可以告诉我们什么是错的,或者如何使用包含传入的任何单词的标题列表来填充结果?

谢谢,Mark

3 个答案:

答案 0 :(得分:2)

var results = db.KS.Where(x => listOfSearch.Any(item => x.Title.Contains(item)));

<强>更新
对于LinqToSql:

var titles = db.KS.Select(item => item.Title)
    .AsEnumerable()
    .Where(title => listOfSearch.Any(word => title.Contains(word)));

答案 1 :(得分:2)

你可以尝试

 List<string> listOfSearch = id.Split(' ').ToList();
 var result = from item in db.KS
              where listOfSearch.Any(v => item.Title.Contains(v)) 
              select item;

var result = db.KS.Where(item => listOfSearch.Any(v => item.Title.Contains(v)));

答案 2 :(得分:1)

将声明更改为:

db.KS.Intersect(.... 

KS会返回您可以直接执行交集的IQueryable。