Я пытаюсь выбрать отдельный список значений из таблицы во время упорядочивания по другому столбцу.
Единственная вещь, которая работает для меня до сих пор, использует магические строки и массив объектов.Есть ли лучший (безопасный для типов) способ?
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();
Кстати, выполнение с linq не будет работать, вы должны выбрать FolderOrder, иначе вы получите ошибку sql (ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
)
, а затем это даст известноеошибка: Expression type 'NhDistinctExpression' is not supported by this SelectClauseVisitor.
в отношении использования анонимных типов с различными
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));
Кажется, что много основ и сложностей, чтобы сделать некоторые основы SQL ....