OrderBy():我需要分页记录,但我不关心顺序:如何指定默认的KeySelector?

时间:2010-10-28 14:54:17

标签: c# entity-framework-4

我需要分页记录,但我不知道实体的字段。 OrderBy Key的任何方式(无论是什么)或只是指定一些默认的OrderBy Lambda?

例如,我可以在不知道实体属性的情况下使用Where子句执行此操作:

 var myRecords = DC.Products.Where( p => p);

这是Skip and Take需要OrderBy的情况,但我不知道Entity的Key字段。

编辑:

当我使用Skip()时没有OrderBy()。Take(),我收到此错误:

The method 'Skip' is only supported for sorted input in LINQ to Entities.
The method 'OrderBy' must be called before the method 'Skip'.

1 个答案:

答案 0 :(得分:1)

要获取Key属性名称,您必须利用 MetadataWorkspace 对象。从中获取名称后,您可以使用 EntitySQL 构建动态查询以获取结果或使用 Query Builder 方法构建 EntitySQL 对你来说,就像我在下面展示的那样,它们就像LINQ to Entities方法一样,除了它们接受字符串而不是Lambdas:

var keyName = context
    .MetadataWorkspace
    .GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace)
    .BaseEntitySets.First(meta => meta.ElementType.Name == "Product")
    .ElementType.KeyMembers.Select(k => k.Name).FirstOrDefault();

    var query = context.Products.OrderBy("it." + keyName);
    var anotherQuery = context.Products.Where("it." + keyName + " = 1" );