LINQ中的NHibernate RowCount产生SQL异常

时间:2011-05-09 06:20:53

标签: sql nhibernate sybase

我有一个查询,我只对行计数感兴趣,但NHibernate生成的查询不适用于Sybase。我已经有了一个自定义的Sybase方言,但我找不到覆盖rowcount的位置。

给出以下代码:

var a = from b in table where b.something = 5 select b
var rows = a.Count

生成类似于此的SQL:

select cast(count(*) as INTEGER) as p1 from table

我不明白为什么NHibernate想要计算计数结果,也不知道我如何覆盖方言或其他地方所以NHibernate不包括演员。计数的结果无论如何都可以转换为整数。

但是如果我使用QueryOver,那么事情就完美了。然而问题是,我的条件之一取决于字符串的长度(是的,数据库设计可能更好,但我目前无法改变它)。使用linq在条件工作中调用字符串上的.Length。但是我不能将字符串长度用作QueryOver表达式中的条件。我还需要一个包含操作,它适用于linq,但不适用于QueryOver。

有没有办法覆盖Count查询的生成方式,所以它会起作用? 我只对有任何行匹配感兴趣,而不是计数,是否有不同的方法呢? 可以改为QueryOver吗?接口使用SQL长度和运算符?

1 个答案:

答案 0 :(得分:1)

您可以使用任何类似函数来理解是否存在任何匹配的行:

var a = from b in table where b.something = 5 select b; 
var isMatch = a.Any();