首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将LINQ转换为SQl存储过程

将LINQ转换为SQl存储过程
EN

Stack Overflow用户
提问于 2018-05-28 18:14:44
回答 1查看 97关注 0票数 0

我正在尝试将此linq查询转换为sql存储过程。

var result =
                    from employee in employees.
                        Where
                        (
                            f => bool.Parse(f.Field<string>("isActive"))
                        )

                    from department in departments.
                Where
                (
                    d =>
                        int.Parse(d.Field<string>("empid")) ==
                            int.Parse(employee.Field<string>("empid"))
                ).
                DefaultIfEmpty()

                    from student in students.
                    Where
                    (
                        b =>
                            int.Parse(b.Field<string>("empid")) ==
                                int.Parse((string)employee.Field<string>("empid"))
                    ).
                    DefaultIfEmpty()

                    group new { employee = employee, department = department, student = student } by
                    new
                    {

                        emp_name = employee.Field<string>("empname"),
                        has_benefits =
                            bool.Parse
                            (

                                department == null ?
                                employee.Field<string>("benefits") :
                                department.Field<string>("benefits")
                            ),

                        dept_name =
                            department == null ?
                            string.Empty :
                            department.Field<string>("deptname") as string,
                    }
                        into grp
                    select
                        new
                        {
                            name = grp.Key.emp_name,
                            has_benefits = grp.Key.has_benefits,
                            dept_name = grp.Key.dept_name,
                            local =
                                grp.Any
                                (
                                    entry =>
                                        entry.student != null &&
                                        entry.student.Field<string>("code").Equals("local", StringComparison.OrdinalIgnoreCase)
                                ),

                        };

我不确定select语句应该是什么样子。我试过了

SELECT * FROM employee e
JOIN department d ON e.empid = d.empid 
JOIN student s ON s.empid = e.empid
WHERE e.isActive = true
GROUP BY 
emp_name, 
CASE( WHEN d == null THEN e.benefits ELSE d.benefits) as has_benefits 
CASE( WHEN d == null THEN '' ELSE d.deptname) as dept_name

我不确定group by应该如何转换。我在proc中尝试了这个,但它没有给我相同的结果。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2018-05-28 19:02:36

如果您共享您的表格布局或设计,效果会更好。尝试下面的查询,但我没有测试它。

    SELECT 
        empname,
        deptname,
        CASE WHEN deptname IS NULL THEN E.benefits ELSE D.benefits END AS has_benefits,
        CASE WHEN S.code = S.local THEN 1 ELSE 0 END AS [local]
    FROM employees AS E
    LEFT JOIN departments AS D ON E.empid = D.empid
    LEFT JOIN students AS S ON E.empid = E.empid
    WHERE E.isActive = 1
    GROUP BY
    empname,
    deptname,
    has_benefits,
    [local]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50564052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档