Linq-to-Entities Dynamic sorting

前端 未结 5 702
无人共我
无人共我 2021-02-04 03:51

This is my query, how can I use string as orderby parameter?

string sortColumn=\"Title\";

var  items = (from ltem in ctxModel.Items
              where ltem.Ite         


        
5条回答
  •  暗喜
    暗喜 (楼主)
    2021-02-04 04:23

    Others have suggested using Dynamic link or other libraries. Personally, I would not bring in a library dependency for such a small task. But two other paths that you can take are...

    • Use Object Call syntax and build your query expression tree dynamically. For example...

    See http://blog.cincura.net/229310-sorting-in-iqueryable-using-string-as-column-name/

    It is important to consider Deferred Execution in this scenario. You can safely build your query that returns an IQueryable object and then run a object query sort on that object. Your query will only be run once, when the data is actually accessed.

    The above blog post is an example of how you can use the Expression API to build and expression tree that you can use for your OrderBy. It really just sounds complicated. The MSDN article may be a better reference. See How to: Use Expression Trees to Build Dynamic Queries on MSDN.

    Or

    • Use the simple route and just use a switch on the title for the entire query.

    Eg.

    ItemType items = default(ItemType);
    switch(sortColumn)
    {
         case "Title":
         {
               items = ctxModel.Items
                        .Where(i => i.ItemID == vId)
                        .OrderBy( i => i.Title);
         }
         break;
     }
    

提交回复
热议问题