2011-07-15 21 views
1

私はLINQに変換したいSQLクエリを持っています。私はdatatable.Iにデータを引っ張ってきたどのようにクエリのWHEREの部分を書くために混乱しています。 col_Conが "G"の場合、col_Conが "L"の場合はcol_Valおよび30(任意の値)以上の値を使用し、col_Valおよび30(任意の値)未満の場合はLINQ to SQL Where with caseステートメントで

の条件を使用します。

SQLクエリ部分にSqlserver 2005を使用しています。ここで

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

の開始は、(三項演算子です?:) SQLにLINQで 'CASE'を生成するための正しい方法です。 –

+0

本当にCASEではなくifである。 SQLの変換はCASEになりますが。 LinqPadで完全なSQL文を確認することができます。 –

+0

私は 'L'を 'G'に変更する必要があると思いますが、それ以外の場合は両側が同じになります。または30:col_Valのいずれかがスワップされました! – Thunder