首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用linq按多个参数排序列表

使用linq按多个参数排序列表
EN

Stack Overflow用户
提问于 2013-10-29 10:21:38
回答 2查看 414关注 0票数 1

如何使用linq orderby函数按照以下顺序对此表行进行排序:

  1. 先按业务类型== A01 - Production
  2. 第二,按业务类型== A06 -没有明确能力的对外贸易,在地区== ME,按字母表
  3. 第三,按业务类型== A06 --没有明确能力的对外贸易,按字母表,地区外的== ME
  4. 第四,按业务类型== A02 -内部贸易
  5. 按业务类型分列的第五位== A04 -消费

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-29 11:04:55

实际上,可以在没有联合的情况下创建单个查询:

代码语言:javascript
运行
复制
var query = 
   db.Foos
     .OrderBy(f =>
         f.BusinessType == "A01 - Production" ? 0 :
         f.BusinessType == "A06 - External trade without explicit capacity" ?
           (f.InArea == "ME" ? 1 : (f.OutArea == "ME" ? 2 : 6)) :
         f.BusinessType == "A02 - Internal trade" ? 3 :
         f.BusinessType == "A04 - Consumption" ? 4 : 5)
     .ThenBy(f =>
         f.BusinessType == "A06 - External trade without explicit capacity" ?
             (f.InArea == "ME" ? f.OutArea : 
             (f.OutArea == "ME" ? f.InArea : ""))  : "");

如果您对对象使用Linq,那么只需提供自定义比较器,或者重写对象的等于和GetHashCode。

票数 1
EN

Stack Overflow用户

发布于 2013-10-29 10:30:32

我猜这就是你想要做的

代码语言:javascript
运行
复制
var result = 
  input.Where(e => e.BusinessType == "A01 - Production")
       .Concat(input.Where(e => e.BusinessType == "A06 - External trade without explicit capacity" && e.InArea == "ME")
                    .OrderBy(e => e.OutArea))
       .Concat(input.Where(e => e.BusinessType == "A06 - External trade without explicit capacity" && e.OutArea == "ME")
                    .OrderBy(e => e.InArea))
       .Concat(input.Where(e => e.BusinessType == "A02 - Internal trade"))
       .Concat(input.Where(e => e.BusinessType == "A04 - Consumption"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19655411

复制
相关文章

相似问题

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