c#
  • dynamic-linq
  • 2015-11-05 125 views 1 likes 
    1

    我在動態Linq遇到了一些麻煩,我希望有人可以提供幫助。我面臨的問題是我需要按特定順序排列列表。在SQL中,我會將其寫爲:C#動態Linq - 案例陳述

    ORDER BY CASE WHEN Blah = 'blah' THEN 1 ELSE 0 END 
    

    我該如何使用Dynamic Linq來實現?

    我已經試過類似:

    listToSort.AsQueryable().OrderBy("CASE WHEN Blah = 'blah' THEN 1 ELSE 0 END") 
    

    但這返回一個錯誤

    無屬性或字段 '案例' 存在型

    此代碼是在生成運行時作爲表達式列表。 因此,我使用動態Linq來將字符串作爲字符串使用。

    回答

    5

    可以使用conditional operator

    listToSort.AsQueryable() 
        .OrderBy(x => x.Blah == "blah" ? 1 : 0); 
    

    您也可以使用這個因爲true是 「更多」 比false

    listToSort.AsQueryable() 
        .OrderBy(x => x.Blah == "blah"); 
    

    看來,在動態LINQ CASE或者不支持條件運算符。但是還有另外一個關鍵字,您可以使用:iif

    listToSort.AsQueryable() 
        .OrderBy("iif(Blah = 'blah', 1, 0)"); 
    

    的動態LINQ表達的方法和關鍵字Overview

    +0

    我不能這樣做,因爲順序的其餘部分寫成字符串。 例如 listToSort.AsQueryable()。的OrderBy( 「CASE WHEN布拉赫= '等等' THEN ELSE 1個0 END,dateCreated會DESC」) 另外,通過被在運行時創建的順序,這就是爲什麼我使用動態LINQ –

    +0

    @RianMostert:我編輯了我的答案。我對動態LINQ不熟悉,所以這對我自己也很有趣。 –

    +0

    非常感謝,那正是我一直在尋找的!也感謝你的鏈接! –

    相關問題