17

我想知道是否有人可以将下面的 SQL 转换为 LINQ to Entities 查询

SELECT Name, IsEmployee, IsQualityNetwork
FROM Person
ORDER BY CASE WHEN IsQualityNetwork = 1 or IsEmployee = 1 THEN 0 ELSE 1 END, Name

我尝试使用 Linq Dynamic,但是当执行此代码时:

var p = ctx.People
    .OrderBy("CASE WHEN IsQualityNetwork = 1 or IsEmployee = 1 THEN 0 ELSE 1 END")
    .OrderBy(e => e.Name);

我得到了例外:{“'Person'类型中不存在任何属性或字段'CASE'”}

4

2 回答 2

19
var p = ctx.People.OrderBy(p => (p.IsQualityNetwork == 1 || p.IsEmployee == 1) ? 0 : 1)
                  .ThenBy(p => p.Name);
于 2013-06-17T16:24:42.907 回答
5

这是您的 SQL 到 LINQ 的翻译。

var query = from p in ctx.People
            let order = p.IsQualityNetwork || p.IsEmployee ? 0 : 1
            orderby order, p.Name
            select new
            {
                p.Name,
                p.IsEmployee,
                p.IsQualityNetwork,
            }

我使用了流利的查询语法,所以我可以向您展示let关键字。 let允许您声明一个范围变量,然后可以在查询中重复使用,如果您有一个在很多地方使用的条件,或者如果您需要链接多个条件,这将非常有用。

于 2013-06-17T16:24:06.133 回答