LINQtoSQL:用多个项求和一个IN子句

时间:2012-08-01 12:53:55

标签: linq-to-sql

我试图弄清楚如何将以下SQL语句转换为LINQ to SQL:

, SUM(CASE WHEN p.prioid IN ('1 - Routine', '6 - Planned Outage', '7-Routine Weekly PM', '8-Routine Non-Weekly PM') THEN 1 ELSE     0 END) as Planning

这是我到目前为止所尝试的内容:

Planning = groupItem.Sum(groupItem.Key.Prioid=="1 - Routine" || groupItem.Key.Prioid=="6 - Planned Outage"||
        groupItem.Key.Prioid=="7-Routine Weekly PM" || "8-Routine Non-Weekly PM") ? 1 : 0


Planning = groupItem.Sum(x=> SqlMethods.Like(x.Prioid, "1 - Routine") || SqlMethods.Like(x.Prioid, "6 - Planned Outage")
        || SqlMethods.Like(x.Prioid, "7-Routine Weekly PM") || SqlMethods.Like(x.Prioid, "8-Routine Non-Weekly PM")) ? 1 : 0  

以及其他一些东西,但是没有一个可以工作,因为你不能将bool转换为int或你“无法将lambda表达式转换为委托类型'System.Func”

我理解为什么我尝试这样做的方式不起作用。

那你是怎么做到的?我知道有一种方法,我只是不太了解LINQ to SQL来解决它。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

我觉得奇怪的是,上述情况不会奏效,因为我过去曾做过这件事。在看了我过去的工作并将其与之比较之后,我看到我犯了一个非常愚蠢的错误并将我的结束括号放在错误的位置。应该看起来像这样:

Planning = groupItem.Sum(x=> SqlMethods.Like(x.Prioid, "1 - Routine") || SqlMethods.Like(x.Prioid, "6 - Planned Outage")
        || SqlMethods.Like(x.Prioid, "7-Routine Weekly PM") || SqlMethods.Like(x.Prioid, "8-Routine Non-Weekly PM" ) ? 1 : 0)