【问题标题】:Get all results in a IQueryable instead of .FirstOrDefault在 IQueryable 而不是 .FirstOrDefault 中获取所有结果
【发布时间】:2018-01-12 04:32:14
【问题描述】:

我的控制器中有以下代码,它获取包含多个单词的搜索的第一个结果。类似这个问题的答案:ASP:NET MVC multiple words in search

var items = from s in db.Items select s;

if (!string.IsNullOrEmpty(searchString) && !searchString.Any(x => Char.IsWhiteSpace(x)))
{
    searchString.Trim();
    items = items.Where(s => s.keywords.Contains(searchString) || s.notes.Contains(searchString)

} 
else if (!string.IsNullOrEmpty(searchString) && searchString.Any(x => Char.IsWhiteSpace(x)))
{
    searchString.Trim();
    string[] strings = searchString.Split(' ');
    var finalItems = new List<Items>();

    foreach (var splitString in strings)
    {
        finalItems.Add(items.FirstOrDefault(s => s.notes.Contains(splitString)
            || s.keywords.Contains(splitString));
    }

    items = finalItems.ToList().AsQueryable();

    return View(items.ToPagedList(pageNumber, pageSize));
}

我想得到所有匹配的结果而不是第一个匹配。现在,当我尝试将 .FirstOrDefault 行更改为:

finalItems.Add(items.Where(s => s.notes.Contains(splitString)
                    || s.keywords.Contains(splitString)

我得到一个 'cannot convert from 'System.Linq.IQueryable(MyProject.Models.Items)' to 'MyProject.Models.Items

我尝试将我的项目分配更改为:

var items = from s in db.Items
                    select s as IQueryable(Items);

这似乎解决了这个问题,但它破坏了我所有的 s.keywords.Contains 或 s.notes.Contains 并出现错误 'IQueryable(Items) 不包含关键字或注释的定义,并且没有扩展方法可以找到接受 IQueryable(Items) 类型的第一个参数的关键字或注释'

【问题讨论】:

  • 使用FirstOrDefault() 你会得到方法的名称说 1 项或什么都没有。当您想要获得超过 1 个像您使用 Where() 编码的项目时,您会返回一个集合。现在你必须改变你所有的方法,他们可以处理一个项目集合而不是只有一个项目

标签: c# linq model-view-controller


【解决方案1】:

FirstOrDefault() 仅返回某种类型的一个元素(在您的情况下为MyProject.Models.Items)或null

Where() 返回项目集合。

Add() 方法需要 MyProject.Models.Items - 一个元素,而不是集合。

你应该使用AddRange()来添加收藏:

finalItems.AddRange(items.Where(s => s.notes.Contains(splitString)
                    || s.keywords.Contains(splitString);

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多