![](/img/trans.png)
[英]How do I pass a dictionary as a parameter when I don't care about a dictionary's types?
[英]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.