我正在将一个字符串传递给控制器,并且需要控制器在我的数据库的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
答案 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。