Entity framework core 从子查询中选择,而不从另一个上下文对象开始
我尝试在netCore 2.2-EF Core中复制以下MSSQL查询:Entity framework core 从子查询中选择,而不从另一个上下文对象开始,entity-framework-core,subquery,asp.net-core-webapi,maximo,Entity Framework Core,Subquery,Asp.net Core Webapi,Maximo,我尝试在netCore 2.2-EF Core中复制以下MSSQL查询: SELECT wonum, MIN(requestdate) AS startdate, MAX(requestdate) AS enddate, MIN(laborcode) FROM ( SELECT wo.wonum, sw.requestdate, wo.wolablnk AS 'la
SELECT
wonum,
MIN(requestdate) AS startdate,
MAX(requestdate) AS enddate,
MIN(laborcode)
FROM
(
SELECT
wo.wonum,
sw.requestdate,
wo.wolablnk AS 'laborcode'
FROM
DB1.dbo.web_users wu INNER JOIN
DB2.dbo.workorder wo on
wu.laborcode = wo.wolablnk INNER JOIN
DB2.dbo.sw_specialrequest sw on
wo.wonum = sw.wonum
WHERE
wo.status in ('LAPPR', 'APPR', 'REC') AND
sw.requestdate > GETDATE()
) a
GROUP BY
wonum
ORDER by
我已经构建并运行了子查询部分,但这让我陷入僵局:
var workOrders = await _db1Context.Workorder
.Where(r => r.Status == "LAPPR" || r.Status == "APPR" || r.Status == "REC")
.ToListAsync();
var specialRequests = await _db2Context.SwSpecialRequest
.Where(r => r.Requestdate > DateTime.Now)
.ToListAsync();
var subQuery = (from webUser in webUsers
join workOrder in workOrders on webUser.Laborcode equals workOrder.Wolablnk
join specialRequest in specialRequests on workOrder.Wonum equals specialRequest.Wonum
orderby webUser.Laborcode, specialRequest.Requestdate, specialRequest.Wonum
select new { workOrder.Wonum, Laborcode = workOrder.Wolablnk, specialRequest.Requestdate, workOrder.Workorderid })
.ToList();
我不确定如何使用我构建的子查询启动我需要的查询,甚至不确定我是否在正确的轨道上。我看了几个其他的例子,但我不明白
有没有人能解释一下这个问题并提供帮助
谢谢大家! 编写与SQL相同的LINQ查询,不要与
toListSync()
混合使用。在toListSync()之后,
查询被发送到服务器。此外,对于此类查询,您应该只使用一个DbContext
var webUsers=\u db1Context.Webuser;
var workOrders=\u db1Context.Workorder
其中(r=>r.Status==“LAPPR”| | r.Status==“APPR”| | r.Status==“REC”);
var specialRequests=_db1Context.swspecialrequests
.Where(r=>r.Requestdate>DateTime.Now);
变量子查询=
从webUser到webUsers
在webUser上的workOrder中加入workOrder。Laborcode等于workOrder.WolabLink
在工单上的特殊要求中加入特殊要求。Wonum等于特殊要求。Wonum
选择新的
{
工作订单,沃纳姆,
Laborcode=workOrder.Wolablnk,
特殊请求。请求日期
};
var resultQuery=
从子查询中的
a组由a.Wonum改为g组
选择新的
{
Wonum=g.键,
StartDate=g.Min(x=>x.Requestdate),
EndDate=g.Max(x=>x.Requestdate),
Laborcode=g.Min(x=>x.Laborcode)
};
//最终物化
var result=await resultQuery.ToListAsync();
帮自己一个忙,先创建一个合适的类模型。使用导航属性,因此您不需要手动连接,并获得大量的表达能力。并展示课堂模型。谢谢你和我对模型的看法!有时候我在学习的时候不会从模特开始,也许我应该这样做。这肯定会使求助请求更容易理解。老实说,一开始我没有考虑过导航道具,我很乐意使用这种方法。这是一个微服务系统,有3个独立的数据库跨2个独立的数据库服务器-表不是全部链接在1个数据库或甚至服务器中-可能会创建一个带有nav道具的类来表示这一点,但我还不知道。再次感谢,我将研究各种可能性并在完成后构建类!谢谢你,现在就完成这项工作。我有三个独立的数据库,一个在数据库服务器上使用代码,另一个在第二个数据库服务器上使用数据库。我不确定如何使用该模型,或者是否可以使用该模型,但我会研究它并感谢您的帮助-关于何时使用ToListSync()的部分是super@ogg130,您无法使用EF Core.interest创建跨数据库查询。非常感谢。