【发布时间】:2012-03-26 08:46:39
【问题描述】:
考虑以下查询:
session.Query<Brand>()
.Where(x => x.Name == "Clause")
.Select(a => a.Name)
.Take(10)
.ToList();
NHibernate 没有生成正确的 SQL - 它似乎没有添加限制器并且似乎正在生成接收代码 - 不是在 SQL 中。
有什么想法吗?
生成的 SQL:
select brand0_.br_name as col_0_0_ from Brands brand0_
where brand0_.br_name=?;p0 = 'Clause'
【问题讨论】:
-
不精通这些事情 - 是否可以逆转对
Take和Select的调用? -
@Damien_The_Unbeliever 我很确定这将带回整个记录,而不仅仅是名称,更糟糕的性能没有任何区别。 Stuart 您用来执行查询的确切代码是什么?什么版本的NHibernate?由于上面的代码实际上并没有得到解决(没有 ToList 或替代方案)。我尝试了一个非常相似的查询,它使用了这个输出: select TOP (@p0)fundingpac0_.EffectiveDate as col_0_0_ from FundingPackage fundpac0_ where fundpac0_.DeletedDate is null;@p0 = 10 [Type: Int32 (0)]
-
SQL 接近尾端(但不是尾端)的分号有问题;它肯定会将分号后的材料作为无效的 Informix SQL 留下。我看不到任何与“Take(10)”相对应的东西。
-
您解决了吗?我在使用 postgresql 时也遇到了同样的情况,也许 Take() 方法在方言中没有正确实现?我不知道..
-
嗨 Pablote,我发现解决此问题的最佳方法是使用 HQL,它生成的 SQL 几乎与您编写的内容相匹配,而且它仍然是跨 SQL 引擎!我发现 LINQ 是非常主观的,如果你写得不正确,它会提供非常不寻常的结果..
标签: sql linq nhibernate informix linq-to-nhibernate