【问题标题】:Search for any word in a Linq query在 Linq 查询中搜索任何单词
【发布时间】:2013-04-30 10:57:01
【问题描述】:

我正在将一个字符串传递给控制器​​,并且需要控制器在我的数据库的 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&lt;string&gt;

'string' 不包含'Intersect' 的定义,并且最佳扩展方法重载'System.Linq.Queryable.Intersect&lt;TSource&gt;(System.Linq.IQueryable&lt;TSource&gt;, System.Collections.Generic.IEnumerable&lt;TSource&gt;)' 有一些无效参数

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

谢谢,马克

【问题讨论】:

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


【解决方案1】:
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)));

【讨论】:

  • 嗨 - 这看起来可以工作 - 但如果我传入“outlook err ...”,它只会返回具有“outlook err..”的项目,而不是“outlook”或“错误” - 你知道如何实现吗?谢谢你,马克
  • 对不起,我的错误 - 它确实有效 - 它是 Twitter TypeAhead,它只突出显示所有文本出现的条目。这是另一个问题:)谢谢你,马克
【解决方案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)));

【讨论】:

    【解决方案3】:

    将语句改为:

    db.KS.Intersect(.... 
    

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

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
    • @RogerRowland ,从反问变成了简单的回答。
    • 能否请您给您的答案更多的实质内容,使其成为更有价值的贡献?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多