【问题标题】:How to C# Linq Order by using list of strings similar to MySql FIELD如何使用类似于 MySql FIELD 的字符串列表来 C# Linq 排序
【发布时间】:2018-04-12 00:04:53
【问题描述】:

我有以下

List<WorkItemHeader>
WorkItemWorkItemHeader(string company, string division, string customerNumber, string imgCode, int sequence, string orderNumber, int lineNumber, DateTime importDate, int processType, int operatorID, int typeset, string product)

我想按多个属性(按 Division、ImportDate、OrderNumber、LineNumber)对我的列表进行排序

分区包含(ABC、XYZ、DEF、HIJ)

我的要求(和问题)是,Division 需要先按包含:(XYZ, ABC) 的 Division 排序,然后按 ImportDate、OrderNumber、LineNumber。

MySql 有 FIELD()

ORDER BY FIELD(position,'forward', 'midfielder', 'defender', 'goalkeeper')

T-SQL 有 CASE WHEN

ORDER BY CASE Position WHEN "forward" THEN 1
                   WHEN "defender" THEN 2
                   WHEN "midfielder" THEN 3
                   WHEN "goalkeeper" THEN 4 END

如何使用 Linq 模拟排序?

【问题讨论】:

  • 如果我只是订购这样的东西,那会起作用: WorkItemHeaders = (List)WorkItemHeaders.OrderBy(x => x.Division).ThenBy(x => x.ImportDate).ThenBy( x => x.OrderNumber).ThenBy(x => x.LineNumber);我需要先使用字符串值按特定顺序排序的 Division。

标签: c# linq


【解决方案1】:

听起来您只想先获得 Division XYZ 和 ABC,按您指定的字段对它们进行排序,然后对其余部分进行排序,然后合并这些结果?您没有指定要如何对剩余的分区或其他字段进行排序,所以我只是按照默认的升序排列。

var firstOrder = header.Where(d => d.Division == "XYZ" || d.Division == "ABC").OrderByDescending(c => c.Division).ThenBy(d => d.ImportDate).ThenBy(d => d.OrderNumber).ThenBy(d => d.LineNumber).ToList();
var secondOrder = header.Where(d => d.Division != "XYZ" && d.Division != "ABC").OrderBy(c => c.Division).ThenBy(d => d.ImportDate).ThenBy(d => d.OrderNumber).ThenBy(d => d.LineNumber).ToList();
firstOrder.AddRange(secondOrder);

【讨论】:

  • secondOrder 行中的逻辑 OR 运算符不应该是逻辑 AND 吗?
  • 如果我有string xxx = "XYZ,ABC";,我可以....Where(d=&gt;d.Division.Contains(xxx).OrderByDescending ...吗?
  • .Where(d=&gt;d.Division.Contains(xxx)).OrderbyDescending。您可能想要订购 where 子句的结果。
  • 这就是我的意思 - 忘了括号。让我试试。
  • 对于第二个订单,我将如何执行 NOT contains?
猜你喜欢
  • 2017-07-15
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
相关资源
最近更新 更多