我可以使用属性订购实体:
context.MySet.OrderBy( entity => entity.Id);
但在这里我要知道 PK 只是一个名为“Id”的列。
我需要通用的订购方式。
context.Set<TEntity>().OrderByPk()
因此我可以保证客户端总是以相同的顺序接收实体。
我可以创建的序列,OrderBy()
但是ThenBy()
这两种方法都需要通用Expression<Func<TEntity,TKey>>
的。但是如果我使用通用类型,我直到运行时才知道键的类型。
我已经创建了获取 epressions 以进行排序的函数,但我不知道如何将它们“附加”到查询中。
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;
}
}