我正在使用以下SQL查询:
SELECT a.AppointmentId, a.Status, a.Type, a.Title, b.Days, d.Description, e.FormId FROM Appointment a (nolock) LEFT JOIN AppointmentFormula b (nolock) ON a.AppointmentId = b.AppointmentId and b.RowStatus = 1 JOIN Type d (nolock) ON a.Type = d.TypeId LEFT JOIN AppointmentForm e (nolock) ON e.AppointmentId = a.AppointmentId WHERE a.RowStatus = 1 AND a.Type = 1 ORDER BY a.Type
我不确定如何在LINQ中实现JOIN。我所有的表都具有外键关系。
您可能需要在我袖手旁观时略微调整一下,但是需要牢记一些主要事项。如果您在dbml中正确设置了关系,则应该能够隐式进行内部联接,并且只需通过初始表访问数据即可。此外,LINQ中的左联接并不像我们希望的那样简单明了,您必须使用DefaultIfEmpty语法才能使其实现。我在这里创建了一个匿名类型,但是您可能想要放入DTO类或类似的东西。对于空值,我也不知道您想做什么,但是您可以使用??。语法,用于定义一个值,如果该值为null,则将其赋给变量。如果您还有其他问题,请告诉我…
var query = (from a in context.Appointment join b in context.AppointmentFormula on a.AppointmentId equals b.AppointmentId into temp from c in temp.DefaultIfEmpty() join d in context.AppointmentForm on a.AppointmentID equals e.AppointmentID into temp2 from e in temp2.DefaultIfEmpty() where a.RowStatus == 1 && c.RowStatus == 1 && a.Type == 1 select new {a.AppointmentId, a.Status, a.Type, a.Title, c.Days ?? 0, a.Type.Description, e.FormID ?? 0}).OrderBy(a.Type);