微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用空字符串搜索列不起作用

如何解决用空字符串搜索列不起作用

首先,我按一些值搜索列,例如FX1624。此值转到TextBox,然后单击“搜索”。我的表格已被该值过滤,可以。 之后,我从文本框中删除此值,然后单击“搜索”以按空值搜索。而且它不起作用,不会返回任何空值。如何在此列中按空/空值过滤?

控制器:

        public ActionResult XYZ(string account)
        {
            var docsModel = _docs.GetAll();
            var model = docsModel
                                   .Where(w => account == null || w.docsModel.ACCOUNT_NR == account)
                                   .Select(s => new DocumentsModel
                                   {
                                       Comp_name = s.docsModel.NAME,Decision_choice = s.docsModel.DECISION,})
                                   .OrderBy(o => o.docsModel.DATE);
            return View(model);
        }

查看:

        @using (Html.BeginForm("XYZ","Home",FormMethod.Get))
        {
            <th>
                    AccountName: @Html.TextBox("account")
                    <input type="submit" value="Search" />
            </th>
        }

解决方法

您正在搜索模型

.Where(w => account == null || w.docsModel.ACCOUNT_NR == account)

但是您要传递的是一个空字符串,而不是null。

.Where(w => String.IsNullOrEmpty(account) || w.docsModel.ACCOUNT_NR == account)

以上内容应涵盖

,

关于我的评论,如果您按照建议的答案进行操作,则在null时将对所有条目进行迭代,只是在整体迭代时返回全部,这是一件相当“昂贵”的事情,只需返回全部即可。

public ActionResult XYZ(string account)
{
    
    var data= string.IsNullOrEmpty(account)
                ?_docs.GetAll()
                :_docs.GetAll().Where(w => w.docsModel.ACCOUNT_NR.Equals(account,StringComparison.Ordinal);
                           
   var model = data.Select(s => new DocumentsModel{
                               Comp_name = s.docsModel.NAME,Decision_choice = s.docsModel.DECISION,})
                           .OrderBy(o => o.docsModel.DATE);
    return View(model);
}

我认为您应该考虑更改_docs.GetAll()方法,以免在读取之后不读取内存中的所有条目,然后对其进行过滤,锁定和较大的数据集可能会导致问题。

要使用您在评论中添加的示例来回答您的问题

string[] inputs = { account,invoice,name };      
var filteredData = inputs.All(x => string.IsNullOrWhiteSpace(x))
                 ? _docs.GetAll()
                 : _docs.GetAll().Where(w => w.ACCOUNT.Equals(account,StringComparison.Ordinal)
                                 || w.INVOICE_NR.Equals(invoice,StringComparison.Ordinal)
                                 || w.NAME.Equals(name,StringComparison.Ordinal));

还有一个包含所有数据的IActionResult,您是否缺少分页?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。