c# - SQL 到 Linq 等价物

标签 c# .net sql linq stored-procedures

我有这个存储过程,我想将其转换为 LINQ to SQL,但遇到了一些麻烦,因为我是 LINQ 的新手(实际上,我不是 SQL 专家)而且我我没有得到预期的结果。 (我尝试从 LINQ 调用 SPROC 到 SQL,但是当我在 SPROC 上将 Period datetime 作为参数发送时,我在 L2S 上收到一些关于参数可为 null 的错误,但我发送它也是不可为 null 的,但我仍然收到相同的错误。 ) 下面是 SQL:

SELECT  Persons.IDPerson,Persons.Name,Persons.PaternalName,Departments.DepartmentName,Jobs.Title, Persons.HireDate, Terminations.TerminationDate, Terminations.HireDate
FROM Persons left outer join Terminations on Persons.IDPerson = Terminations.IDPerson
             left outer join Departments on Departments.idDepartment = Persons.IdDepartment
             left outer join Jobs on Jobs.IDJob = Persons.IDJob          
WHERE (Terminations.IDTermination is null OR    Terminations.TerminationDate >= @Period) 
       and Terminations.HireDate <= @Period OR Persons.HireDate <=@Period
ORDER BY Persons.HireDate, Terminations.HireDate asc

到目前为止,这是我的 LINQ 代码(它编译但没有给我预期的记录)Criteria.Period 是一个可为 null 的日期时间:

 result = from emp in HRSystemDB.Persons.OfType<Employee>()
                     join term in HRSystemDB.Terminations on emp.IDPerson equals term.IDPerson into all
                     from aHire in all.Where(t => (t.IDTermination == null || t.TerminationDate.Date >= Criteria.Period.Value.Date)
                         && t.HireDate.Value.Date <= Criteria.Period.Value.Date
                         || emp.HireDate.Date <= Criteria.Period.Value.Date).DefaultIfEmpty()
                     select new DepartmentHeadCountQuery
                     {
                         FullName = emp.Name + " " + emp.PaternalName,
                         Department = emp.Department.DepartmentName,
                         JobTitle = emp.Job.Title,
                         TermDate = aHire.TerminationDate,
                         EHiredDate = emp.HireDate,
                         TermHireDate = aHire.TerminationDate
                     };

提前致谢。

最佳答案

这个(仅免费试用)可能很有用:http://www.sqltolinq.com/

  • Linqer 是一个 SQL 到 LINQ 的转换器工具。
  • 它将帮助您学习 LINQ 并转换您现有的 SQL 语句。
  • 并非每个 SQL 语句都可以转换为 LINQ,但 Linqer 涵盖了许多不同类型的 SQL 表达式。
  • Linqer 支持 .NET 语言 C# 和 Visual Basic。

还有一个完全免费的工具:

http://www.linqpad.net/

  • LINQPad 也是学习 LINQ 的好方法:它预装了《C# 3.0 in a Nutshell》一书中的 200 个示例。没有更好的方式来体验 LINQ 和函数式编程的酷炫。

关于c# - SQL 到 Linq 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2122586/

相关文章:

sql - 在不重做复杂查询的情况下,在其他查询中重用复杂查询结果

c# - 使禁用文本框的文本更易于查看

C# Visual Studio 2008 - Windows 窗体设计器中的设计时错误

c# - TripleDES 16 字节不工作

php - 如何在 Codeigniter 中防止 ASCII 编码/二进制字符串 SQL 注入(inject)

sql - SUM 值按列分组但不 'aggregate' 可能吗?

C#:枚举的默认值应该是 None 还是 Unknown?

c#匿名类型问题

c# - Form.ShowDialog() 不显示启用调试的窗口

c# - Entity Framework 6 - 将主键作为类型的属性