1

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

例如。id="outlook 错误信息"

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

这会产生以下两个错误:

实例参数:无法从“字符串”转换为“System.Linq.IQueryable<string>

“字符串”不包含“相交”的定义,并且最佳扩展方法重载“ System.Linq.Queryable.Intersect<TSource>(System.Linq.IQueryable<TSource>, System.Collections.Generic.IEnumerable<TSource>)”有一些无效参数

谁能告诉我出了什么问题,或者如何仅使用包含传入的任何单词的标题列表来填充结果?

谢谢,马克

4

3 回答 3

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)));
于 2013-04-30T11:53:36.097 回答
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)));
于 2013-04-30T13:20:42.083 回答
1

将语句更改为:

db.KS.Intersect(.... 

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

于 2013-04-30T11:04:55.720 回答