无法让延迟的LINQ语句在nHibernate中工作

hey*_*uss 1 c# nhibernate

尝试使用NHIDnate的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();
Run Code Online (Sandbox Code Playgroud)

不应用条件块中的Where过滤器; 当我运行.ToList时,我得到的记录我没想到.但是,如果我删除where过滤器并将其直接附加到_products调用,它将按预期工作.我误解了LINQ提供程序的工作原理吗?如何创建这样的查询,而无需为每个可能的过滤条件和组合重写查询?

Jon*_*eet 5

LINQ中的方法不会影响它们被调用的对象 - 它们返回一个表示调用结果的对象.所以你要:

if (filteredIds != null) 
{
    result = result.Where(...);
}
Run Code Online (Sandbox Code Playgroud)

(把它看作有点像调用ReplaceTrim字符串 - 字符串是不可变的,所以它只是重要的返回值.)