2011-07-15 88 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