簡體   English   中英

OrderBy():我需要分頁記錄,但我不在乎順序:如何指定默認的KeySelector?

[英]OrderBy(): I need to page records, but I don't care about the order: How to specify a default KeySelector?

我需要分頁記錄,但我不知道實體的字段。 是否可以通過密鑰訂購OrderBy(無論它是什么)還是直接指定一些默認的OrderBy Lambda?

例如,我可以使用Where子句執行此操作,而無需了解實體的屬性:

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

在這種情況下,“跳過”和“獲取”需要OrderBy,但我不知道實體的“關鍵”字段。

編輯:

當我在使用Skip()。Take()時沒有OrderBy()時,出現以下錯誤:

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

為了獲得Key屬性名稱,您必須利用MetadataWorkspace對象。 從中獲得名稱后,就可以使用EntitySQL構建動態查詢來獲取結果,或者使用查詢生成器方法為您構建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" );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM