- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个简单的类
public class Blog
{
public Blog(){
Comments=new List<Comment>();
}
public virtual Guid Id { get; set; }
public virtual string Title { get; set; }
public virtual string Text { get; set; }
public virtual DateTime CreatedDate { get; set; }
public virtual IList<Comment> Comments { get; set; }
}
和
public class Comment
{
public virtual Guid Id { get; set; }
public virtual string Author { get; set; }
public virtual string Text { get; set; }
}
使用 AutoMap 绘制 map ,世界一切美好。我可以毫无问题地添加和保存实体。
我想做的是使用 QueryOver 获取每个博客的评论数,但包括那些没有评论的博客,因此在 SQL 中:
SELECT b.Title,COUNT(c.ID) AS Comments
FROM Blogs b LEFT JOIN Comments c ON b.ID=c.BlogID
得到
Title CommentsBlog 1 0Blog 2 0Blog 3 0Blog 4 4Blog 5 0
The closest I've got is
var results=session.QueryOver<Blog>()
.Left.JoinQueryOver<Comment>(b=>b.Comments)
.TransformUsing(new DistinctRootEntityResultTransformer())
.List<Blog>()
.Select(b => new {
Id = b.Id,
Title = b.Title,
Comments=b.Comments.Count
});
得到正确答案,但 SQL 运行为
SELECT b.Id,b.Title,c.ID,c.Author,etc... AS Comments
FROM Blogs b LEFT JOIN Comments c ON b.ID=c.BlogID
然后在客户端进行计数,这似乎不是最有效的方法。
这可以用 QueryOver 或 ICriteria 来完成吗?如果可能,我宁愿不使用 hql。
整个解决方案可在 https://github.com/oharab/NHibernateQueriesSpike 获得。如果您想查看所有配置等。
干杯
B.
最佳答案
为什么你总是在发布问题后立即找到答案?
答案是 JoinAlias 方法,带有别名占位符:
Comment comment=null;
var results=session.QueryOver<Blog>()
.Left.JoinAlias(b=>b.Comments,()=>comment)
.SelectList(
list=>list
.SelectGroup(b=>b.Id)
.SelectGroup(b=>b.Title)
.SelectCount(b=>comment.Id)
)
.List<object[]>()
.Select(b => new {
Id = (Guid)b[0],
Title = (string)b[1],
Comments=(int)b[2]
});
这完全符合我的预期。
B.
关于c# - 使用 QueryOver/ICriteria 在 NHibernate 中聚合左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12176907/
我正在尝试返回给定属性不为空的所有实体。问题是 IsNotEmpty() 仅适用于集合。以下是我目前采用的一般方法,它显然行不通。 ICriteria lvCriteria = NHibernateH
是否有任何好的 ICriteria API 概述?来自官方 NHibernate 引用的第 12 章太短,我仍然没有清楚地了解 ICriteria 的用法。 最佳答案 NHibernate 中的 Cr
谁能告诉我SetTimeout(int) 的单位是什么? ICriteria 中的方法接口(interface)用途? 是毫秒、秒、分钟还是其他? 最佳答案 一点点四处寻找表明它可能是几秒钟: 假设
使用 NHibernate 我通常使用 Get() 或 Load() 方法查询单个记录(取决于我是否需要代理): SomeEntity obj = session.Get(new PrimaryKey
我正在使用 NHibernate 并创建如下查询:- ICriteria criteria = session.CreateCriteria(); ProjectionList projList =
如何编写与此 linq 匹配的 ICriteria? ProgramItems.OrderBy(x => x.TimeBlocks.Min(y => y.StartTime)) ProgramItem
我正在尝试使用 ICriteria 创建具有连接的查询健康)状况。我尝试生成的 SQL 应该如下所示 SELECT c.ClientID FROM Client c LEFT OUTER JOIN C
使用 NHibernate ICriteria 并添加 .AddOrder ... 我想按有时为 null 的属性排序,所有填充的属性都位于顶部。 .AddOrder 允许我这样做吗?如果没有,还有其
我通常经常使用 LINQ,尤其是 LINQ-to-Objects,因此我对 LINQ 相当流利。 我正在考虑使用 LINQ-to-NHibernate 作为我的 NHibernate 项目的查询语言。
[旗帜] public enum ShowProductOn : short { HomePage = 1, SalesPage = 2, NewsLetter = 4 };
我一直在为即将到来的项目评估 NHibernate,并通过一些用例来了解它的性能。我尚未找到使用 Criteri API 表达以下查询的方法。 两个相当基本的表格(为了本示例的目的而进行了删减) CR
有没有办法使用 ICriteria 结果作为后续条件查询的“基础”? 例如,如果我想创建一个查询 SELECT department_id, sum(cost) AS total FROM payme
您好,我想编写一个 FindByExample(object o) 方法。所以我尝试了这个: public IList FindByExample(T o) { return Session.
是否可以在 Visual Studio 的输出中添加注释以由 queryover 查询生成?以前当我们使用 ICriteria 时,有一个简单的 SetComment 方法,我们可以设置查询名称,这样
任何人都知道如何将 ICriteria 转换为 DetachedCriteria。我需要使用现有的 ICriteria 作为子查询的一部分: .Add(Subqueries.PropertyIn("N
我有一个 SQL 查询,需要使用 NHibernate 的 ICriteria API 表示。 SELECT u.Id as Id, u.Login as Login, u.Fi
我有一个包含多个字段的类,其中一个是 IList> . public class Foo { public IList> Bars { get; set; } } 我正在使用 Fluent NHi
在使用 QueryOver 或 ICriteria 进行查询时,是否可以在 NHibernate 中指定外部连接的附加条件? 我需要在外部连接表上添加一些额外的条件,但 NHibernate 总是将它
在 NHibernate使用 Load 时,您可以轻松受益于一级缓存或 Get方法。但是ICriteria呢? , HQL , Linq-to-NHibernate和 QueryOver ?他们也使用
我们正在尝试使用 WCF 和 ICriteria 创建一个很酷的 API,例如: [ServiceContract] public class ProductService { [OperationC
我是一名优秀的程序员,十分优秀!