Fetch the documents, as is, with the article references eager loaded, and
then..

 string.Join(", ", n.ArticleReferences.OrderBy(p => p.
ArticleNumber).Select(q=q.ArticleNumber))

Not because it's better but because it's easier.

/G

2011/8/25 Sandor DrieĆ«nhuizen <[email protected]>

> I have a simple model, consisting of a document that references one or more
> article using a reference object (this is because in the domain, we do not
> own the articles so we can only reference them).
>
> I'm trying to write a query that lists the documents, printing the ID and a
> string consisting of a comma separated list of article numbers. For example:
>
>     ID ARTICLES
>     ------------------
>     1  ACC, PE2,
>     2  ER0, AQ3, FEE
>     3  PE2
>
> **My problem is with selecting the comma separated list.**
>
> Here are the domain classes:
>
>     // The Entity class has an Id property.
>     public class Document : Entity
>     {
>         public virtual IEnumerable<ArticleReference> ArticleReferences {
> get; set; }
>         public virtual DateTime ReceiveDate { get; set; }
>     }
>
>     // The ValueObject does not have an Id property ofcourse.
>     public class ArticleReference : ValueObject
>     {
>         public virtual string ArticleNumber { get; set; }
>         public virtual string ArticleName { get; set; }
>     }
>
> **The article reference is a value object** so it does not have an ID of
> its own.
>
> This is the view model that represents an item in the result list:
>
>     public class DocumentListItemModel
>     {
>         public int Id { get; set; }
>         public string ArticleNumbers { get; set; }
>         public string ReceiveDate { get; set; }
>     }
>
> And here's the query class I have come up with so far:
>
>     public class DocumentQuery
>     {
>         public IList<DocumentListItemModel> ExecuteQuery()
>         {
>             IntermediateModel model = null;
>             ArticleReference articleReferenceAlias = null;
>
>             return Session
>                 .QueryOver<Document>()
>                 .JoinAlias(n => n.ArticleReferences, () =>
> articleReferenceAlias);
>                 .SelectSubQuery(
>                     QueryOver.Of<ArticleReference>(() =>
> articleReferenceAlias)
>                         // There is no way of matching references to
> documents from a domain
>                         // point of view since the references are value
> objects and
>                         // therefore don't have an ID.
>                         .Where(n => ...)
>                         .Select(q => articleReferenceAlias.Number))
>                     .WithAlias(() => model.ArticleNumbers)
>
> .TransformUsing(Transformers.AliasToBean<IntermediateModel>());
>                 .Future<IntermediateModel>()
>                 .ToList()
>                 .Select(n =>
>                     new DocumentListItemModel()
>                     {
>                         Id = n.Id,
>                         ArticleNumbers = string.Join(", ",
> n.ArticleNumbers.OrderBy(p => p)),
>                         ReceiveDate = n.ReceiveDate.ToString("d",
> CultureInfo.CurrentCulture)
>                     })
>                 .ToList();
>         }
>
>         private class IntermediateModel
>         {
>             public int Id { get; set; }
>             public IEnumerable<string> ArticleNumbers { get; set; }
>             public DateTime ReceiveDate { get; set; }
>         }
>     }
>
> As you can see, I can't express the `.Where` statement because there is no
> way of matching references to documents from a domain point of view. The
> references are value objects and therefore don't have an ID.
>
> **The question is:** how do I fix the query to properly select the list of
> article numbers so I can use it in my `string.Join` statement to make the
> comma separated string?
>
> I also have a post of this question on 
> StackOverflow.<http://stackoverflow.com/q/7059741/198990>
>
> Thanks,
> Sandor.
>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/nhusers/-/paKCySBP0-YJ.
> 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.
>

-- 
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.

Reply via email to