2011-07-15 107 views
1

我有一個SQL查詢,我想轉換成LINQ。我已經將數據提取到datatable.I很困惑如何編寫查詢的WHERE部分。條件取決於表中的列,如果col_Con爲「G」,則使用大於col_Val和30(任何值),否則如果col_Con爲「L」,則使用小於條件的col_Val和30(任意值)LINQ to SQL與where case case

我正在使用Sqlserver 2005作爲SQL查詢部分。

SELECT * 
FROM Mytable 
WHERE 
    CASE 
    WHEN col_Con= 'G' THEN 
     col_Val 
    ELSE 
     30 
    END 
     <= 
    CASE 
    WHEN col_Con= = 'L' THEN 
     30 
    ELSE 
     col_Val 
    END 

這裏是我的LINQ

  //Mytable is a DataTable 
      var drs = from DataRow dr in Mytable.Rows 
      where 
      ... 
      select dr; 

回答

4
var drs = from DataRow dr in Mytable.Rows 
      where 
      (col_Con == 'G' ? col_Val : 30) <= (col_Con == 'L' ? 30 : col_Val) 
      select dr; 
+0

三元運算符的開始(?:)是生成一個'在LINQ to SQL CASE'的正確方法。 –

+0

這不是一個真正的案例,而是一個if。雖然SQL翻譯將是一個CASE。你可以在LinqPad中看到完整的SQL語句來檢查。 –

+0

我認爲'L'需要更改爲'G',否則雙方將是相同的。或30:col_Val中的一個交換! – Thunder