我必须对此表格进行排序"报告" on嵌套表中的数据。即每个报告项目都有一些与之关联的网络,每个网络都有一个状态属性,我需要对报告列表进行排序。这是我到目前为止能够获得的一个示例,但是我无法以IOrderedQueryable可接受的方式编写它,因为我需要将其转换为SQL并通过执行而不是我在编写代码的地方:
var orderedReports = reports.OrderBy((r) =>
{
switch (r.Nets.Any(n => n.Status.Contains("New")) ? "New" :
r.Nets.Any(n => n.Status.Contains("Updated")) ? "Updated" :
r.Nets.Any(n => n.Status.Contains("Ignored")) ? "Ignored" : "None" )
{
case "New": return 1;
case "Updated": return 2;
case "Ignored": return 3;
case "None": return 4;
default: return 5;
}
}).ThenBy(r => r.ReportID);
我意识到许多报告可以具有相似或甚至匹配的状态数,因此在初始排序之后,我按该报告的ID排序。我基本上希望所有报告至少有一个" New"首先是状态,然后是如上所述的其他人。我还想重申一下,我需要确保它保留在IOrderedQueryable中,因为这需要在对数据库进行查询时在SQL中执行。
答案 0 :(得分:2)
看起来switch语句没有SQL equivelant,并且它希望在Linq to Objects中运行它。
似乎条件运算符有直接转换: https://www.codeproject.com/Articles/38264/How-to-Create-T-SQL-CASE-Statements-With-LINQ-To-S
我强烈建议在LinqPad中进行测试,因为它可以生成SQL等价物来帮助您进行调试。