【问题标题】:Creating dynamically linq to EF query with OR predicates [duplicate]使用 OR 谓词创建动态 linq to EF 查询 [重复]
【发布时间】:2021-12-09 19:34:51
【问题描述】:

我正在尝试根据用户的输入生成 LINQ TO Sql 查询。使用 AND 谓词动态创建 LINQ 查询非常简单:

var query = context.Users;

if (age != null)
{
    query = query.Where(x => x.Age == age);
}

if (name != null)
{
   query = query.Where(x => x.Name == name);
}

因此,如果年龄和姓名在所有查询之后都不为空,则如下所示:

query.Where(x => x.Age == age && x.Name == name);

但是如何制作它,而不是 AND 我希望它是 OR?我希望最终的查询是这样的:

query.Where(x => x.Age == age || x.Name == name);

【问题讨论】:

  • 试试看linqKit
  • 请不要破坏您的帖子。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本,因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: c# entity-framework linq


【解决方案1】:

你提到的 OR 语法是正确的。

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp3
{
class Program
{
    static void Main(string[] args)
    {
        List<Employee> employees = new List<Employee>
        {
            new Employee { name = "test1", age = 21},
            new Employee { name = "test2", age = 22},
            new Employee { name = "test3", age = 23},
        };

        List<Employee> selectedEmployeesand = employees.Where(x => x.name == "test2" && x.age == 22).ToList();

        Console.WriteLine("using AND");

        foreach (Employee emp in selectedEmployeesand)
        {
            Console.WriteLine(emp.name);
        }

        Console.WriteLine("---------------------------");

        Console.WriteLine("using OR");

        List<Employee> selectedEmployeesor = employees.Where(x => x.name == "test2" || x.age == 21).ToList();

        foreach (Employee emp in selectedEmployeesor)
        {
            Console.WriteLine(emp.name);
        }

        Console.ReadLine();
    }

    public class Employee
    {
        public string name { get; set; }
        public int age { get; set; }
    }
}
}

输出:

using AND
test2
---------------------------
using OR
test1
test2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多