2011-05-09 70 views
1

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

考虑下面的代码:

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。

有没有办法来重写如何生成计数查询,所以它会工作? 我只是有兴趣,如果有任何行匹配,而不是计数,有没有不同的方式做到这一点? 可以改为QueryOver?接口使用SQL长度和在运算符中?

回答

1

是否有使用任何功能类似这样的匹配任何行,你可以理解:

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

这为我工作,谢谢。 – Staale 2011-05-09 07:47:08