我有一个由匿名对象组成的 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 查询而不是在内存中进行过滤...
最佳答案
有两种可能的方式:
- 构建一个
表达式
,正如 Coincoin 所指出的 将所有参数放入数组并使用
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/