我将如何使用 linq orderby 函数按照以下顺序对表行进行排序:
- 首先按业务类型== A01 - 生产
- 第二个按业务类型== A06 - 没有明确能力的对外贸易,其中In Area == ME , Out Area按字母
- 第三个按业务类型== A06 - 没有明确能力的对外贸易,其中Out Area == ME,按字母表的In Area
- 第四个业务类型== A02 - 内部贸易
- 按业务类型排名第五== A04 - 消费
我想这就是你想要做的:
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"));
实际上可以创建没有联合的单个查询:
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。