【问题标题】:Can't get deferred LINQ statements to work in nHibernate无法让延迟的 LINQ 语句在 nHibernate 中工作
【发布时间】:2012-07-30 12:49:27
【问题描述】:

尝试使用 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 提供程序的工作原理?如何在不为每个可能的过滤条件和组合重写查询的情况下创建这样的查询?

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

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

    if (filteredIds != null) 
    {
        result = result.Where(...);
    }
    

    (可以把它想象成在字符串上调用ReplaceTrim - 字符串是不可变的,所以只有返回值很重要。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多