我想在另一列上排序時從表中選擇不同的值列表。NHibernate 3 - 類型安全的方式來選擇一個不同的值列表
到目前爲止,我工作的唯一東西是使用魔法字符串和對象數組。任何更好的(類型安全的)方式?
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的....