尝试使用 NHibernate 的 LINQ 提供程序编写动态查询,但我遇到了问题。我的理解是 LINQ 查询被推迟到调用,(即使用 ToList()),所以我有以下代码:
string[] filteredIds = new[] { "someIdNotInUse"};
var result = _products
.GetAll()
.Skip(0)
.Take(10);
if (filteredIds != null)
{
result.Where(x => x.Child1.Child2.Any(z => filteredIds.Contains(z.Child3.Id)));
}
var r = result.ToList();
不应用条件块中的 Where 过滤器;当我运行 .ToList 时,我得到了我期望没有的记录。但是,如果我删除 where 过滤器并将其直接附加到 _products 调用,它会按预期工作。我是否误解了 LINQ 提供程序的工作原理?如何在不为每个可能的过滤条件和组合重写查询的情况下创建这样的查询?