0

我可以使用属性订购实体:

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;
    }
}
4

1 回答 1

0

乔恩的这个回答非常有帮助。

然后我可以只返回关键属性的字符串并调用OrederByPropertyThenByProperty

于 2013-08-12T11:42:50.343 回答