OrderBy(“it.” + sort) — Hard coding in LINQ to Ent

2020-06-20 12:49发布

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

2条回答
叼着烟拽天下
2楼-- · 2020-06-20 13:17

No nice way, so far

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

查看更多
Fickle 薄情
3楼-- · 2020-06-20 13:29

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.

查看更多
登录 后发表回答