LINQ按文本搜索
本文关键字:搜索 文本 LINQ | 更新日期: 2023-09-27 18:26:19
我想做一个linq,当txtKeyword.Text为空时,查询将返回所有数据,否则将返回包含txtKeyword.Text的数据。
var search = from a in Context.data
where txtKeyword.Text.Trim().Count() > 0 ? a.Name.Contains(txtKeyword.Text.Trim()) : true
select a;
Error:
DbExpressionBinding requires an input expression with a collection ResultType.
Parameter name: input
我怎样才能做到这一点?
对于查询生成器来说,查询表达式似乎太复杂了。
我会这样分离代码:
var search = Context.data;
string filter = txtKeyword.Text.Trim();
if (!string.IsNullOrEmpty(filter))
search = search.Where(a => a.Name.Contains(filter));
var search = from a in Context.data
where string.IsNullOrWhitespace(txtKeyword.Text)
|| a.Name.Contains(txtKeyword.Text.Trim())
select a;
var search = from a in Context.data
where txtKeyword.Text.Trim().Any()
|| a.Name.Contains(txtKeyword.Text)
select a;
var searchText = txtKeyword.Text.Trim();
var returnAll = string.IsNullOrEmpty(searchText);
var search = from a in Context.data
where returnAll || a.Name.Contains(searchText)
select a;
您可以从linq语句中取出对txtKeyword的条件检查。像这样的
var search = string.IsNullOrEmpty(txtKeyword.Text)
? (from a in Context.data
where a.Name.Contains(txtKeyword.Text.Trim())
select a)
: (from a in Context.data select a);