c# - 在 LINQ to SQL 中动态构造 "or"LIKE 查询

标签 c# linq linq-to-sql anonymous

我有一个由匿名对象组成的 LINQ 查询。

在给定点,我想通过传入的搜索参数限制结果,但这可以是一个或多个参数,我想使用这些参数执行“LIKE x OR LIKE y OR LIKE z”。

在代码中,它看起来像这样:

reservations = reservations.Where(r =>
  r.GuestLastName.Contains(parameter1) || r.GuestFirstName.Contains(parameter1) || 
  r.GuestLastName.Contains(parameter2) || r.GuestFirstName.Contains(parameter2) || 
  // Parameter 3, 4, 5,..
);

知道reservations,我怎么能动态地构造它呢?类型为 IQueryable<'a> (anonymous object) ?我查看了各种资源,似乎只有在知道类型时才能找到一种方法,而不是在使用匿名类型时。

重要的是要知道它是 Linq to SQL,因此应该将其转换为 SQL 查询而不是在内存中进行过滤...

最佳答案

有两种可能的方式:

  1. 构建一个表达式,正如 Coincoin 所指出的
  2. 将所有参数放入数组并使用 Any:

    var parameters = new [] { parameter1, parameter2, /*...*/ }
    reservations = reservations
        .Where(r => 
            parameters.Any(p => r.GuestFirstName.Contains(p)
                                || r.GuestLastName.Contains(p)));
    

关于c# - 在 LINQ to SQL 中动态构造 "or"LIKE 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587417/

相关文章:

c# - Facebook 应用出现 HTTP 500.23 错误;翻译?

c# - 如何使用 LINQ 查询找出两列之间的差异?

c# - 使用 Task.Factory.StartNew 和 Thread.Sleep 等待 x 秒

C# Linq 在另一个 List<int> 中查找 List<int> 中项目的所有索引

c# - 从已编译的 linq 查询中获取生成的 sql

c# - 使用 C# 从列表中删除最旧的 n 项

c# - 7 秒 EF 启动时间,即使对于微小的 DbContext

c# - "Order by Col1, Col2"使用 Entity Framework

c# - 如何强制 Linq 更新一行的上次编辑时间?

c# - LINQ to SQL 分组依据与 take