在LINQ to SQL中动态构造"或"LIKE查询

Maa*_*eel 7 c# linq anonymous linq-to-sql

我有一个由匿名对象组成的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,..
);
Run Code Online (Sandbox Code Playgroud)

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

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

Nuf*_*fin 2

有两种可能的方法:

  1. Expression正如 Coincoin 所指出的那样,构建一个
  2. 将所有参数放入数组并使用Any

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