0

我有下一个代码

if (user != null)
  query = query.Where(item => item.User.Id == user.Id);
else if (equipment != null)
  query = query.Where(item => false);// TODO: Add logic for equipment

但 NHibernate 无法为item => false. 有一天这个表达式会改变,但现在它必须返回空查询。有什么方法可以解决这个问题吗?

4

2 回答 2

1

假设它是用户的 IQueryable,试试这个。

if (user != null)
  query = query.Where(item => item.User.Id == user.Id);
else if (equipment != null)
  query = new List<User>().AsQueryable();

编辑:

OP 说它是 IQueryOver 而不是 IQueryiable,查看源代码并且 QueryOver 受到保护,因此现在无法轻松创建一个空的。如果可以的话,我的建议是使用 LINQ 提供程序,这样我的原始答案就会起作用。如果不可能,那么这个 UGLY hack 现在可以使用。

if (user != null)
                query = query.Where(item => item.User.Id == user.Id);
            else if (equipment != null)
                query = query.Where(item => item.User.Id < 0 && item.User.Id > 1); 
于 2013-05-08T15:59:43.733 回答
0

我想我用过

  Where(item => 1 == 0)
于 2013-05-08T21:21:59.140 回答