使用LINQ/Entity Framework以编程方式链接OrderBy/ThenBy [英] Programmatically chain OrderBy/ThenBy using LINQ / Entity Framework

查看:60
本文介绍了使用LINQ/Entity Framework以编程方式链接OrderBy/ThenBy的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个报告界面,最终用户可以在其中为返回的报告的排序顺序选择多个字段.我遇到的问题是,由于要遍历排序字段列表,因此我无法真正链接OrderBy/ThenBy方法.我在想这样的事情:

I have a reporting interface where the end user gets to select multiple fields for the sort order of the returned report. The problem I am having is that I can't really chain the OrderBy / ThenBy methods, since I'm iterating through a list of sort fields. I'm thinking something like this:

foreach (string sort in data.SortParams)
{
    switch (sort)
    {
        case "state":
            query = query.ThenBy(l => l.RegionCode);
            break;
        case "type":
            query = query.ThenBy(l => l.Type);
            break;
        case "color":
            query = query.ThenBy(l => l.Color);
            break;
        case "category":
            query = query.OrderBy(l => l.Category);
            break;
    }
}

(注意:为简单起见,我已删除确定它是否为第一个排序项目的开关.)

(Note: I've removed the switch determining if this is the first sort item for simplicity's sake.)

是否有任何关于如何遍历集合以确定排序顺序的想法?

Any thoughts on how to iterate through a collection to determine the sort order?

推荐答案

如果使用初始的种子" OrderBy,则可以执行所需的操作:

You could do what you want if you use an initial "seed" OrderBy:

编辑,您需要先调用OrderBy来创建IOrderedEnumerable(或IOrderedQueryable),然后再附加ThenBy子句:

EDIT you need to call OrderBy to create an IOrderedEnumerable (or IOrderedQueryable) first before attaching ThenBy clauses:

var orderedQuery = query.OrderBy(l => 0);
foreach (string sort in data.SortParams)
{
    switch (sort)
    {
        case "state":
            orderedQuery = orderedQuery.ThenBy(l => l.RegionCode);
            break;
        case "type":
            orderedQuery = orderedQuery.ThenBy(l => l.Type);
            break;
        case "color":
            orderedQuery = orderedQuery.ThenBy(l => l.Color);
            break;
        case "category":
            orderedQuery = orderedQuery.ThenBy(l => l.Category);
            break;
    }
}
query = orderedQuery;  // cast back to original type.

如果您想要更灵活的方法,请查看此答案

If you want something more flexible check out this answer

这篇关于使用LINQ/Entity Framework以编程方式链接OrderBy/ThenBy的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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