订单声明中的“案例”

时间:2014-04-04 10:01:32

标签: c# linq

您好我有以下linq声明:

IEnumerable<TabTransaktion> allTransactions 
    = TabTransaktions1.Union(TabTransaktions2)
                      .Where(trans => trans.TabVorgang != null).
                       .OrderBy(tran => tran.TabVorgang.Wirkdatum)
                      .OrderByDescending(trans2 => trans2.TabVorgang.ID);

但是当只有trans2.TabVorgang.ID等于0时,我希望通过降序来获得第二个顺序。所以我需要LinQ的“order by clause”中的“case”。 LinQ相当于这样的东西:

SELECT BusinessEntityID, SalariedFlag
FROM HumanResources.Employee
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC
        ,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;
GO

我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

假设SalariedFlagbool(在类型为bit的SQL中),则两个排序表达式完全相互。换句话说,主查询可以分为两个析取查询,最终结果是它们的并集:

IEnumerable<TabTransaktion> mainQuery
    = TabTransaktions1.Union(TabTransaktions2)
                      .Where(trans => trans.TabVorgang != null);

var queryOne  =  mainQuery.Where(p=>p.SalariedFlag ==1)
                       .OrderByDescending(tran => tran.BusinessEntityID );

var queryTwo  =  mainQuery.Where(p=>p.SalariedFlag ==0)
                       .OrderBy(tran => tran.BusinessEntityID);

var finalResult = queryOne.Union(queryTwo);