Ok, I found this which resolves the type-safety...
var projectionList = Projections.ProjectionList();
projectionList.Add(Projections.Property<T>(d => d.FolderName));
projectionList.Add(Projections.Property<T>(d => d.FolderOrder));
On Sep 7, 11:43 am, art <[email protected]> wrote:
> I am trying to select a distinct list of values from a table whilst
> ordering on another column.
>
> The only thing working for me so far and uses magic strings and an
> object array. Any better (type-safe) way?
>
> var projectionList = Projections.ProjectionList();
> projectionList.Add(Projections.Property("FolderName"));
> projectionList.Add(Projections.Property("FolderOrder"));
>
> var list = Session.QueryOver<T>()
> .Where(d => d.Company.Id ==
> SharePointContextHelper.Current.CurrentCompanyId)
> .OrderBy(t => t.FolderOrder).Asc
> .Select(Projections.Distinct(projectionList))
> .List<object[]>()
> .ToList();
>
> return list.Select(l => new Folder((string)l[0])).ToList();
>
> btw, doing it with linq won't work, you must select FolderOrder
> otherwise you'll get a sql error (`ORDER BY items must appear in the
> select list if SELECT DISTINCT is specified.`
> )
>
> and then doing that gives a known error : `Expression type
> 'NhDistinctExpression' is not supported by this SelectClauseVisitor.`
> regarding using anonymous types with distinct
>
> var q = Session.Query<T>()
> .Where(d => d.Company.Id ==
> SharePointContextHelper.Current.CurrentCompanyId)
> .OrderBy(d => d.FolderOrder)
> .Select(d => new {d.FolderName, d.FolderOrder})
> .Distinct();
> return q.ToList().Select(f => new Folder(f));
>
> All seems a lot of hoops and complexity to do some sql basics....
--
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.