25

是否可以让 Nhibernate linq 生成带有“In”子句的查询?例如 - Where AnID in (x,y,z)

4

3 回答 3

35

我不知道 nHibernate 在生成所有潜在 LINQ 查询方面的状态,但您应该能够使用它.Contains()来生成 IN。

var list = new int[] { x, y, x };
var q = db.Entities.Where( e => list.Contains( e.AnID ) );
于 2010-03-30T16:37:34.963 回答
4

同意,这确实有效。我发现为“不在”生成的 SQL 很奇怪(截至 3.3.0 GA)

...
from
  mytable t0_
where
  case
    when t0_.testValue in (
              @p0 , @p1 , @p2
          ) then 1
          else 0
    end=@p3
@p0 = 9 [Type: Int32 (0)],
@p1 = 99 [Type: Int32 (0)],
@p2 = 109 [Type: Int32 (0)],
@p3 = False [Type: Boolean (0)],
...

当“不在”会更清楚时,“案例”似乎有点奇怪(不是我打算阅读每一行,而是可能在跟踪/配置文件中)。

(... 那天晚些时候 ...)

我意识到上述 SQL 的“奇怪”选择只是在我使用

.Where(e => list.Contains(e.AnID) == false)

如果我用

.Where(e => !list.Contains(e.AnID))

生成的 SQL 更清晰(使用 'not in')

于 2012-04-22T10:26:55.793 回答
0

NHibernate 有一个选项 IsIn 是 RestrictionExtensions 的一部分

x => x.Name.IsIn(new[] {"a", "b"} )

于 2015-05-29T18:00:10.170 回答