1

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

  1. 首先按业务类型== A01 - 生产
  2. 第二个按业务类型== A06 - 没有明确能力的对外贸易,其中In Area == ME , Out Area字母
  3. 第三个按业务类型== A06 - 没有明确能力的对外贸易,其中Out Area == ME,按字母表的In Area
  4. 第四个业务类型== A02 - 内部贸易
  5. 按业务类型排名第五== A04 - 消费

在此处输入图像描述

4

2 回答 2

1

我想这就是你想要做的:

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"));
于 2013-10-29T10:30:32.100 回答
1

实际上可以创建没有联合的单个查询:

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 to Objects,则只需提供自定义比较器,或覆盖您的对象的 Equals 和 GetHashCode。

于 2013-10-29T11:04:55.887 回答