如何解决用空字符串搜索列不起作用
首先,我按一些值搜索列,例如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 举报,一经查实,本站将立刻删除。