为什么我的 Linqued 查询不起作用?
why my Linqued query not working?
我有这个 sql 查询很好用
select u.FirstName,u.LastName,case when ei.Gender=1 then 'Male' else 'Female' end as Gender,t.Name as 'Team Name',ei.MobileNumber,u.Phone as 'Alternative Number',u.EmailAddress,ei.AlternateEmailAddress,ei.GMail,ei.Skype,FORMAT(ei.DateOfBirth,'dd-MMM-yyyy') AS BirthDay,ei.Address1,ei.Address2,ei.City,ei.[State],ei.Country,ei.ZipPostalCode,ei.Designation,ei.MasterLeaves
from Employee e
inner join [user] u
on e.[User]=u.Id and IsDeleted!=1
inner join Team t
on e.Team=t.Id
inner join EmployeeInformation ei
on e.AdditionalInformation=ei.Id
当
我将相同的查询转换为 linqued 查询,即
var EmpReport = (from Emp in db.Employees
join Usr in db.Users
on Emp.User equals Usr.Id
join Tm in db.Teams
on Emp.Team equals Tm.Id
join Ei in db.EmployeeInformations
on Emp.AdditionalInformation equals Ei.Id
where Usr.IsDeleted != true
select new { Usr.FirstName, Usr.LastName, Gender = Ei.Gender == 1 ? "Male" : "Female", Team_Name = Tm.Name, Ei.MobileNumber, Alternative_Number = Usr.Phone, Email_Address = Usr.EmailAddress, Alternate_Email_Address = Ei.AlternateEmailAddress, Ei.GMail, Ei.Skype, Birthday = Ei.DateOfBirth.ToString("dd-MMM-yyyy"), Ei.Address1, Ei.Address2, Ei.State, Ei.Country, Ei.ZipPostalCode, Ei.Designation, Ei.MasterLeaves }).ToList();
它给了我这个错误
LINQ to Entities does not recognize the method
'System.String ToString(System.String)' method, and this method cannot
be translated into a store expression.
主要是这部分的错误
Birthday = Ei.DateOfBirth.ToString("dd-MMM-yyyy").
我哪里做错了?
您收到错误是因为 DateTime.ToString()
是一个 .NET 函数,不能直接转换为 SQL。 return 您的 DateOfBirth
列的原始格式并在您的应用程序中获得结果后更改格式,或者使用 Linq-to-Entities 中提供的一些 SQL 函数,请参阅这个答案:
我有这个 sql 查询很好用
select u.FirstName,u.LastName,case when ei.Gender=1 then 'Male' else 'Female' end as Gender,t.Name as 'Team Name',ei.MobileNumber,u.Phone as 'Alternative Number',u.EmailAddress,ei.AlternateEmailAddress,ei.GMail,ei.Skype,FORMAT(ei.DateOfBirth,'dd-MMM-yyyy') AS BirthDay,ei.Address1,ei.Address2,ei.City,ei.[State],ei.Country,ei.ZipPostalCode,ei.Designation,ei.MasterLeaves
from Employee e
inner join [user] u
on e.[User]=u.Id and IsDeleted!=1
inner join Team t
on e.Team=t.Id
inner join EmployeeInformation ei
on e.AdditionalInformation=ei.Id
当 我将相同的查询转换为 linqued 查询,即
var EmpReport = (from Emp in db.Employees
join Usr in db.Users
on Emp.User equals Usr.Id
join Tm in db.Teams
on Emp.Team equals Tm.Id
join Ei in db.EmployeeInformations
on Emp.AdditionalInformation equals Ei.Id
where Usr.IsDeleted != true
select new { Usr.FirstName, Usr.LastName, Gender = Ei.Gender == 1 ? "Male" : "Female", Team_Name = Tm.Name, Ei.MobileNumber, Alternative_Number = Usr.Phone, Email_Address = Usr.EmailAddress, Alternate_Email_Address = Ei.AlternateEmailAddress, Ei.GMail, Ei.Skype, Birthday = Ei.DateOfBirth.ToString("dd-MMM-yyyy"), Ei.Address1, Ei.Address2, Ei.State, Ei.Country, Ei.ZipPostalCode, Ei.Designation, Ei.MasterLeaves }).ToList();
它给了我这个错误
LINQ to Entities does not recognize the method
'System.String ToString(System.String)' method, and this method cannot
be translated into a store expression.
主要是这部分的错误
Birthday = Ei.DateOfBirth.ToString("dd-MMM-yyyy").
我哪里做错了?
您收到错误是因为 DateTime.ToString()
是一个 .NET 函数,不能直接转换为 SQL。 return 您的 DateOfBirth
列的原始格式并在您的应用程序中获得结果后更改格式,或者使用 Linq-to-Entities 中提供的一些 SQL 函数,请参阅这个答案: