ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 优化linq查询以对行进行排序?

2019-06-08 19:03:30  阅读:226  来源: 互联网

标签:c sql lambda linq entity-framework-6


我通过使用以下查询从数据库“媒体”表中获取值.现在我必须通过其父ID来排序行首先我必须显示父ID行,然后在其下面显示其子行,如下表所示:

ID   Name   ParentMediaId
3     C           null
1     A            3
4     D           null
2     B            4

如何通过使用以下数据表获得上表的结果,并使用lambda表达式修改以下linq查询?

数据库中的媒体表:

ID      Name     ParentMediaId
1        A            3
2        B            4
3        C           null
4        D           null 

查询获取数据:

var dataset = _mediaRepository.GetAll().
                   Where(d => d.matter== matterId).Select(d => new
                   {
                       d.Id,
                       d.Name,
                       d.ParentMediaId,
                   }).ToList();

解决方法:

如果值不为null,您可以通过ParentMediaId订购;否则为Id,然后通过ParentMediaId使用ThenBy进行排序,使父母首先出现.

对于OrderBy,您可以使用null-coalescing operator(??).如果操作数不为null,则返回左侧操作数;否则它返回右手操作数.

var objects = _mediaRepository.GetAll()
                   .Where(d => d.matter== matterId)
                   .Select(d => new
                    {
                        d.Id,
                        d.Name,
                        d.ParentMediaId,
                    });

var dataset = objects.OrderBy(o => o.ParentMediaId ?? o.Id)
                     .ThenBy(o => o.ParentMediaId)
                     .ToList();

如果孩子首先出现,则使用ThenByDescending而不是ThenBy.

元素将按如下顺序排列:

ID   Name   ParentMediaId
3     C           null
1     A            3
4     D           null
2     B            4

标签:c,sql,lambda,linq,entity-framework-6
来源: https://codeday.me/bug/20190608/1199888.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有