OrderBy(“it.” + sort) — Hard coding in LINQ to Entity framework?

旧巷老猫 提交于 2019-12-04 23:51:06

问题


I have been trying to use dynamic LINQ to Entity in my application for specifying the OrderBy attribute at runtime. However when using the code as described in the majority of documentation:

var query = context.Customer.OrderBy("Name");

I received the following exception:

System.Data.EntitySqlException: 'Name' could not be resolved in the current scope or context. Make sure that all referenced variables are in scope, that required schemas are loaded, and that namespaces are referenced correctly.

After much searching I found this MSDN page:

http://msdn.microsoft.com/en-us/library/bb358828.aspx

Which included the following code example:

ObjectQuery<Product> productQuery2 = productQuery1.OrderBy("it.ProductID");

This prompted me to change my code to the following:

var query = context.Customer.OrderBy("it.Name");

After this the code works perfectly. Would anyone be able to confirm that this is indeed the correct way to get OrderBy working with LINQ to Entity? I can’t believe that the framework would have been implemented in this way, perhaps I have overlooked something?

Thanks, Matt


回答1:


The it.Name syntax is ESQL and is indeed specific to the EF. There are good reasons to use this sometimes (e.g., collation specifiers), but it's not what I normally do.

Usually I use standard LINQ expressions:

var query = context.Customer.OrderBy(p => p.Name);

You can also use System.Linq.Dynamic, if you download it from Code Gallery, and then your original query:

var query = context.Customer.OrderBy("Name");

...will work.




回答2:


No nice way, so far

My answer to this question was to create a stored procedure which has parameter to control sorting.



来源:https://stackoverflow.com/questions/3320084/orderbyit-sort-hard-coding-in-linq-to-entity-framework

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!