Looks like you're using the old contrib provider. It's deprecated, if you want support you'll need to try the new one built into NH3.
BTW, if Post has a Comments property, why would you want to go to the trouble of creating subqueries anyway? On 30 Okt., 19:42, lszk <[email protected]> wrote: > Using LinqPad I found something else. I can write > > var t=from p in NHUnitOfWork.CurrentSession.Linq<Post>() > select new //MyDTO > { > Title=p.Title, > CommentsCount=p.Comments.Count() > }; > t.Dump(); > > } > > And this works ok, result looks like I want. But when I want to return > result to MyDTO object, in LinqPad I have exception: > Column 'Posts.Title' is invalid in the select list because it is not > contained in either an aggregate function or the GROUP BY clause. > > With linq to sql it works ok. > How can I write it to return result to MyDTO with linq to nhibernate? > > On 30 Paź, 00:20, lszk <[email protected]> wrote: > > > > > Is this possible to use let keyword with nhibernate linq? I wrote > > > posts = from post in postsRepository.GetPosts(name) > > let commentsCount = (from c in > > NHUnitOfWork.CurrentSession.Linq<Comment>() > > where c.Post.ID == post.ID > > select c).Count() > > select new ... > > > and in response I have NHibernate.QueryException: could not resolve > > property: post of: Sys.Domain.Entities.Post > > > I tried also to write it without the let expression. > > > posts = from post in postsRepository.GetPosts(name) > > select new > > PublishedPostsWithCategoryAndTagsDTO() > > { > > > CommentsCount = > > (from c in post.Comments > > where c.Post.ID == post.ID > > select c).Count(), > > > Result is similar: > > NHibernate.QueryException: could not resolve property: Comments.ID of: > > Sys.Domain.Entities.Post > > > In the end the third: > > > posts = from post in postsRepository.GetPosts(name) > > let commentsCount = > > > commentsRepository.GetCommentsCountForPost(post.ID) > > //... > > > public int GetCommentsCountForPost(Guid? postId) > > { > > var t = (from c in Session.Linq<Comment>() > > where c.Post.ID.Value == postId.Value > > select c).Count(); > > > return t; > > } > > > The result: > > System.InvalidCastException: You cannot cast > > 'NHibernate.Linq.Expressions.PropertyAccessExpression' to > > 'NHibernate.Linq.Expressions.CollectionAccessExpression'. > > > Only this one works. Take the posts and use a loop: > > foreach (var t in posts) > > { > > t.CommentsCount=(from c in > > NHUnitOfWork.CurrentSession.Linq<Comment>() > > > where c.Post.ID == t.ID > > select c).Count(); > > } > > Unfortunatelly select n+1 occurs. > > > How can I do it without loop? post->comment this is one to many > > relation. I need this too for many to many, so I hope this is posible > > to do.- Zitierten Text ausblenden - > > - Zitierten Text anzeigen - -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
