我需要分页记录,但我不知道实体的字段。 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'.
答案 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" );