linq - LINQ 中的条件多字段搜索和过滤

标签 linq

假设我们有下表:

Person:
  PersonID,
  Name,
  Age,
  Gender

并且我们提供了一个搜索功能,允许用户根据名称 来搜索表。和/或 年龄。

编写 SQL(或 LINQ)查询的棘手部分是用户可以选择搜索两个字段、任何一个字段或不搜索字段。如果他想搜索所有内容,则只需将文本框留空即可。

这样做的逻辑可以写成如下:
var p;
if(Name_TextBox=='')
{
   p=from row in person
        select row ;
}
else 
{
  p= from row in person
      where row.Name=Name_TextBox
        select row ;
}
// repeat the same for age

现在过了一会儿,代码变得很长而且很乱......我怎样才能用 将上面的内容压缩成单个查询没有 if-else ?

最佳答案

试试这样的代码

       string personName = txtPersonName.Text;
       int personAge = Convert.ToInt32(txtAge.Text);
       var opportunites =  from p in this.DataContext.Persons
                            select new
                            {
                                p.PersonID,
                                p.Name,
                                p.Age,
                                p.Gender
                            };

        if (personsID != 0)
            opportunites = opportunites.Where(p => p.PersonID == personID);

        if (personName != string.Empty)
            opportunites = opportunites.Where(p => p.Name.StartsWith(personName));

        if (personAge != 0)
            opportunites = opportunites.Where(p => p.Age == personAge);

这将正常工作。如果没有给出 personName 则不会添加到 where,如果给出则添加。

关于linq - LINQ 中的条件多字段搜索和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1005961/

相关文章:

c# - LINQ to SQL 和编译查询

c# - 用于 IEnumerable 列表的聚合方法

C#将Func方法签名翻译成新的Func方法签名

c# - 底层连接已关闭 : An unexpected error occurred on a receive

c# - 从对象列表创建制表符分隔的字符串

linq - 值或构造函数查询未定义

javascript - 在选项选择 CSHTML 上显示/隐藏类

c# - 使用 2 个 from 子句重写 linq-to-sql 查询以连接

c# - 从 XDocument 获取数据

c# - 比较数组 LINQ