0
我可以使用屬性訂購實體:如何以通用方式按鍵排序實體?
context.MySet.OrderBy(entity => entity.Id);
但在這裏,我要知道PK是隻有一個名爲「ID」列。
I'need通用的排序方式。
context.Set<TEntity>().OrderByPk()
因此,我可以保證客戶端總是以相同的順序接收實體。
我可以創建OrderBy()
和ThenBy()
的序列,但這兩種方法都需要通用的Expression<Func<TEntity,TKey>>
。但是,如果我使用泛型類型,我不知道鍵的類型,直到運行時。
我已經創建了函數來獲取排序的外觀,但我不知道如何將它們「附加」到查詢中。
public IEnumerable<Expression> GetKeys<TDbEntity>() where TDbEntity : class
{
var keyMembers = (this as IObjectContextAdapter).ObjectContext.MetadataWorkspace.GetItem<EntityType>(typeof(TDbEntity).FullName, true, DataSpace.OSpace).KeyMembers;
foreach (var keyMember in keyMembers)
{
var parameter = Expression.Parameter(typeof (TDbEntity));
var expression = Expression.Lambda(Expression.Property(parameter, keyMember.Name), parameter);
yield return expression;
}
}
這些信息是有幫助的: http://stackoverflow.com/questions/41244/dynamic-linq-orderby-on- ienumerablet http://stackoverflow.com/questions/2841585/create-linq-to-entities-orderby-expression-on-the-fly http://stackoverflow.com/questions/12564545/設置鍵的內部順序逐個條款-in-LINQ的動態 –