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.