我不习惯使用LINQ编写JOIN语句。我正在尝试将这个旧查询转换为LINQ Lambda语法,并努力理解如何进行。任何帮助都将非常感谢。
SELECT p.id, p.code, u.email, b.date
FROM
Patients p
LEFT JOIN Users u
ON u.patientid =p.id and u.id=p.primarycontactid
INNER JOIN BillingSettings b ON b.PracticeId = p.id and b.isDue=1
WHERE p.status=1
AND p.appointmentdate > now() and p.appointmentdate < now() + 90
and b.expirationdate < now()
order by p.id
字符串
2条答案
按热度按时间rm5edbpk1#
我写这个没有编译器,所以它可能是错误的,但通常你的答案是下面。
字符串
busg9geu2#
LINQ不是嵌入式SQL,它是ORM的查询语言。ORM处理对象,而不是表。ORM本身,EF,将基于 * 实体 * 及其关系生成任何JOIN。要给予一个好的答案,需要知道实际实体的样子。
假设一个病人有一个
User
和BillingSetting
属性,LINQ查询可能是这样的:字符串
不需要显式JOIN。EF Core将从
Patient.BillingSettings
和Patient.User
导航属性及其元数据生成JOIN。生成的查询将把日期值作为参数传递,而不是像
GetDate()
或Now()
这样的特定于产品的调用如果
BillingSettings
是一个1-Many关系,这意味着我们真正想要的是过期的账单,而不是病人。在这种情况下,查询将不得不从账单开始:型