首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清理if/else LINQ代码

如何清理if/else LINQ代码
EN

Stack Overflow用户
提问于 2014-08-28 22:22:42
回答 1查看 127关注 0票数 0

我有这样的东西:

代码语言:javascript
复制
        if (sort == "Customer")
        {
            if (sortDirection == SortDirection.Descending)
                myList = myList.OrderByDescending(e => e.SiteOrganization.Organization.Name).ToList();
            else
                myList = myList.OrderBy(e => e.SiteOrganization.Organization.Name).ToList();
        }
        if (sort == "RequestType")
        {
            if (sortDirection == SortDirection.Descending)
                myList = myList.OrderByDescending(e => e.TypeId).ToList();
            else
                myList = myList.OrderBy(e => e.TypeId).ToList();
        }
        if (sort == "RequestedByShort")
        {
            if (sortDirection == SortDirection.Descending)
                myList = myList.OrderByDescending(e => e.RequestedByUser.ShortName).ToList();
            else
                myList = myList.OrderBy(e => e.RequestedByUser.ShortName).ToList();
        }

我想把这个清理一下,这样就可以了。

代码语言:javascript
复制
if (sortDirection == SortDirection.Descending)
                myList = myList.OrderByDescending(e => e.RequestedByUser.ShortName).ToList();
            else
                myList = myList.OrderBy(e => e.RequestedByUser.ShortName).ToList();

所以我只有一个LINQ查询,不管它是什么“排序”。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2014-08-28 22:44:46

如果你把你的排序逻辑移到一个方法中,你可以直接把谓词传入,例如

代码语言:javascript
复制
public IList<TSource> SortBy<TSource, TMember>(IEnumerable<TSource> list, Func<TSource, TMember> selector, SortDirection direction)
{
    if (direction == SortDirection.Descending)
        return list.OrderByDescending(selector).ToList();
    else
        return list.OrderBy(selector).ToList();
}
...
if (sort == "Customer") {
    list = SortBy(list, x => x.SiteOrganization.Organization.Name, SortDirection.Descending);
} else if (sort == "RequestType") {
    list = SortBy(list, x => x.TypeId, SortDirection.Ascending);
} else if (sort == "RequestedByShort") {
    list = SortBy(list, x => x.RequestedByUser.ShortName, SortDirection.Descending);
}

Live demo

如果您希望将其用作所有列表的通用解决方案,则可以将其创建为扩展方法

代码语言:javascript
复制
public static class ListExt
{
    public static IList<TSource> SortBy<TSource, TMember>(this IEnumerable<TSource> list, Func<TSource, TMember> selector, SortDirection direction)
    {
        if (direction == SortDirection.Descending) {
            return list.OrderByDescending(selector).ToList();
        } else {
            return list.OrderBy(selector).ToList();
        }
    }
}
...
list = list.SortBy(x => x.TypeId, SortDirection.Ascending);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25551212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档