我如何可以排序基于用户的ASP.NET MVC中选择一个列表? [英] How can I sort a list based on a user's selections in ASP.NET MVC?

查看:84
本文介绍了我如何可以排序基于用户的ASP.NET MVC中选择一个列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个可以通过任何地方从根据用户的选择1至6个字段进行排序的客户的列表。排序字段可以是任何顺序。如果我知道的领域和未来的时间顺序,排序很简单:

 客户=客户
                .OrderBy(C => c.LastName)
                .ThenBy(C => c.City)
                .ThenBy(C => c.Age).ToList();

我将如何传递在运行时的排序字段?有没有办法做这样的事情?

 字符串sortField1 =国家;
    字符串sortField2 =城;
    字符串sortField3 =类型;    客户=客户
                .OrderBy(C => c.sortField1)
                .ThenBy(C => c.sortField2)
                .ThenBy(C => c.sortField3).ToList();


解决方案

我在一个foreach循环链.OrderBy语句解决了这个。一个.OrderBy被追加到我的LINQ查询由用户选择的每个排序准则。通过在一个IQueryable包装我的名单,我能看到,因为它是建立在Linq查询。

 的IQueryable< CustomerMaster>查询= customers.AsQueryable();            //反向排序(排序是逐步应用)
            //我们需要用户的最后
            //排序标准得到首次应用
            sortOrder.Reverse();            的foreach(在中将sortOrder VAR sortItem)
            {
                开关(sortItem)
                {
                    案LName的:
                        查询= query.OrderBy(C => c.LName);
                        打破;                    案国家:
                        查询= query.OrderBy(C => c.State);
                        打破;                    默认:
                        查询=查询
                            .OrderBy(C => c.LName)
                            .ThenBy(C => c.State);
                        打破;
                }
            }
            客户= query.ToList();
            //设置排序顺序返回到用户的订单
            sortOrder.Reverse();
        }

结果查询:

 查询= {System.Collections.Generic
        .List`1 [CustomerMaster]
        .OrderBy(C => c.LName)
        .OrderBy(C => c.State)}

I have a list of customers that can be sorted by anywhere from 1 to 6 fields based on a user's selection. The sort fields can be in any order. If I know the fields and the sequence ahead of time, sorting is easy:

customers = customers
                .OrderBy(c => c.LastName)
                .ThenBy(c => c.City)
                .ThenBy(c => c.Age).ToList();

How would I pass in the sort fields at runtime? Is there a way to do something like this?

    string sortField1 = "State";
    string sortField2 = "City";
    string sortField3 = "Type";

    customers = customers
                .OrderBy(c => c.sortField1)
                .ThenBy(c => c.sortField2)
                .ThenBy(c => c.sortField3).ToList();

解决方案

I solved this by chaining .OrderBy statements in a ForEach loop. An .OrderBy gets appended to my Linq query for each sort criterion selected by the user. By wrapping my list in an IQueryable, I'm able to see the Linq query as it is built.

IQueryable<CustomerMaster> query = customers.AsQueryable();

            // reverse the sort order (sorts are applied incrementally) 
            // We need the user's last
            // sort criteria to get applied first
            sortOrder.Reverse();

            foreach (var sortItem in sortOrder)
            {
                switch (sortItem)
                {
                    case "LName":
                        query = query.OrderBy(c => c.LName);
                        break;

                    case "State":
                        query = query.OrderBy(c => c.State);
                        break;

                    default:
                        query = query
                            .OrderBy(c => c.LName)
                            .ThenBy(c => c.State);
                        break;
                }
            }
            customers = query.ToList();
            // set the sortorder back to user's order
            sortOrder.Reverse();
        }

Resulting query:

query = {System.Collections.Generic
        .List`1[CustomerMaster]
        .OrderBy(c => c.LName)
        .OrderBy(c => c.State)}

这篇关于我如何可以排序基于用户的ASP.NET MVC中选择一个列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆