【问题标题】:LINQ to SQL With the where with case statementLINQ to SQL 使用 where with case 语句
【发布时间】:2011-07-15 10:50:22
【问题描述】:

我有一个想要转换为 LINQ 的 SQL 查询。我已将数据拉入数据表。我很困惑如何编写查询的 WHERE 部分。条件取决于表中的列,如果 col_Con 为“G”,则使用大于 col_Val 和 30(任何值),否则如果 col_Con 为“L”,则使用小于条件 col_Val 和 30(任何值)

我将 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;

【问题讨论】:

    标签: .net sql linq case where


    【解决方案1】:
    var drs = from DataRow dr in Mytable.Rows
                where   
                (col_Con == 'G' ? col_Val : 30) <= (col_Con == 'L' ? 30 : col_Val)
                select dr;
    

    【讨论】:

    • 三元运算符 (?:) 是在 LINQ to SQL 中生成CASE 的正确方法。
    • 这不是一个真正的案例,而是一个如果。虽然 SQL 翻译会是一个 CASE。您可以在 LinqPad 中查看完整的 SQL 语句以进行检查。
    • 我认为“L”需要更改为“G”,否则双方将相同。或 30 之一: col_Val 交换!
    • 我刚刚将您的 SQL 语句翻译成 LINQ。 LINQ 查询与 SQL 完全相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多