c# - Fluent Nhibernate - 通过分组连接查询

标签 c# sql nhibernate fluent-nhibernate queryover

我在 NHibernate 中执行连接查询时遇到问题。 我有下表:

BOOKS:
ID, NAME, BOOK_TYPE, AUTHOR_ID

AUTHORS:
ID, FIRST_NAME, LAST_NAME, BIRTH_DATE

我想在 Fluent NHibernate 中执行以下 sql 查询:

SELECT AUTHORS.ID, COUNT(BOOKS.ID)
FROM AUTHORS
INNER JOIN BOOKS
ON AUTHORS.ID = BOOKS.AUTHOR_ID
GROUP BY AUTHORS.ID;

类(class):

public class Book
{
     public virtual int id{get; set;}
     public virtual string Name{get; set;}
     public virtual int booktype{get; set;} 
     public virtual Author author{get; set;}
}

public class Author
{
     public virtual int id{get; set;}
     public virtual string FirstName{get; set;}
     public virtual string LastName{get; set;}
     public virtual DateTime BirthDate{get; set;}
     public virtual IList<Book> Books{get; set;}
}

这是我尝试过的:

GraphDTO graph = null;
Session.QueryOver<Book>()
.SelectList(list => list
.SelectGroup(x => x.Author.Id).WithAlias(() => graph.Id)
.SelectCount(x => x.Id).WithAlias(() => graph.BooksNum))
.TransformUsing(Transformers.AliasToBean<GraphDTO>())
.List<GraphDTO>();

最佳答案

好吧,我们可以通过这样的连接和分组来做到这一点

Author author = null;
Book book = null;
var query = session.QueryOver<Contact>(() => author)
    .JoinQueryOver(() => author.Authors, () => book)
    .SelectList(list => list
        .SelectGroup(x => author.ID)
        // we can have more stuff from author table
        .SelectGroup(x => author.LastName)
        .SelectGroup(x => author.FirstName)
        .SelectCount(x => book.ID))
    ;

var result = query.List<object[]>();

但是上面的SQL其实不需要JOIN,可以像这里Fluent Nhibernate - selecting specific column and count query with group by一样

session.QueryOver<Book>()
    .SelectList(list => list
        .SelectGroup(c => c.Author.ID)
        .SelectCount(c => c.ID))
    .List<object[]>();

关于c# - Fluent Nhibernate - 通过分组连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33993503/

相关文章:

c# - 从带参数的电子邮件启动 ClickOnce 应用程序

mysql - 错误代码1215,无法添加外键约束

SQL如何限制特定列的数量?

sql - 如何以图形方式表示 SQL 查询

nhibernate - Entity Framework 4.1 VS Nhibernate,适合 ORM 中的菜鸟

c# - 尝试 NHibernate 事务时捕获 SqlException

C# 代码看不到文件,即使它存在

c# - LINQ List<> 上下移动元素

来自 Azure Function 的 C# HttpClient POST 请求(带有用于第三方 API 的授权标记)将被删除 header 和正文

NHibernate SchemaExport 无法删除表 .... 有时