我有这个存储过程,我想将其转换为 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。
还有一个完全免费的工具:
- LINQPad 也是学习 LINQ 的好方法:它预装了《C# 3.0 in a Nutshell》一书中的 200 个示例。没有更好的方式来体验 LINQ 和函数式编程的酷炫。
关于c# - SQL 到 Linq 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2122586/