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

我怎样才能做到这一点?

LINQ按文本搜索

对于查询生成器来说,查询表达式似乎太复杂了。

我会这样分离代码:

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);