【问题标题】:NHibernate Linq Query - Select Sub QueriesNHibernate Linq 查询 - 选择子查询
【发布时间】:2014-01-29 17:01:37
【问题描述】:

我是 NHibernate 的新手,在 Linq 上不是很好,但这让我很头疼,我找不到任何关于 SO 的非常明确的例子。

我需要从数据库中获取线程信息,但我需要包含一个子查询来计算特定线程上的帖子数。

这是一个 SQL 语句

Select ID, ThreadName, 
       (Select Count(Posts.ID) From Posts Where ThreadID = Threads.ID) as Replies
From Threads

和类结构:

Class Thread
    Property ID as Integer
    Property ThreadName as String
    Property Replies as Integer
End Class

Class Post
    Property ID as Integer
    Property ThreadID as Integer
    Property PostText as String
End Class

任何帮助将不胜感激。同时提供一个 LINQ 示例和一个使用 NHibernate 语法的示例。

【问题讨论】:

    标签: linq nhibernate linq-to-nhibernate


    【解决方案1】:

    所以查询会是这样的:

    C#

    var query =
        from thrs in session.Query<YourNamespace.Thread>() // in C# Thread would need 
        select new YourNamespace.Thread  // precise NS to distinguish System.Threading
        {
            ID = thrs.ID,
            ThreadName = thrs.ThreadName,
            Replies = thrs.Posts.Count()
        };
    
    var list = query.ToList(); // the above statement was executed
    

    VB:

    Dim query = From t As Thread In session.Query(Of Thread)()
                     Select New Thread With {
                         .ID = t.ID,
                         .ThreadName= t.ThreadName,
                         .Replies = t.Posts.Count                         
                     }
    Dim list as List(of Thread) = query.ToList()
    

    这里非常重要的一点是,Thread必须映射到Posts的集合

    C#

    public class Thread
    {
        ...
        // really sorry for C# ... I will learn VB syntax ... 
        public virtual IList<Post> Posts { get; set; }
    

    VB

    Public Class Thread
        Public Overridable Property Posts As IList(Of Post)
    

    如果这个collection of Posts,将被映射到NHibernate,那么上面的LINQ语法将开箱即用

    【讨论】:

    • 出色的工作@Gman,非常感谢您对 VB 的帮助!享受 NHibernate
    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2021-12-07
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多