gpt4 book ai didi

mysql - 过滤相关对象的数据

转载 作者:行者123 更新时间:2023-11-30 22:06:54 25 4
gpt4 key购买 nike

我在从我的数据库中检索正确的数据集时遇到问题。我对它的了解不足以修复它。

我正在为我叔叔的运输公司创建一个应用程序。因此,他有负责执行任务的司机,并且对于每个任务,司机都会驾驶多次。所以它看起来像:一个驱动程序有零个或多个分配,但一个分配仅针对一个驱动程序,一个分配有多个驱动器,但一个驱动器仅用于一个分配。

我想做的是从一个月开始获取驱动程序的所有驱动器,因为我需要将其导出到 Excel,并且我想在应用程序中创建每月概览。这就是我一直从驱动程序获取所有驱动器所做的工作:

public Chauffeur FindAlleOpdrachtenRitten(string id)
{
return _ctx.Users
.Include(o => o.Opdrachten)
.Include(o => o.Opdrachten.Select(x => x.Ritten))
// .Where(o => o.Opdrachten.(r => r.Datum == DateTime.Now))
.SingleOrDefault(x => (x.Id == id));
}

或者将其放入 (my)SQL 语句中,它应该如下所示:

    SELECT * FROM ICS.AspNetUsers as a 
INNER JOIN ICS.Opdrachts as o on a.Id = o.ChauffeurID
INNER JOIN ICS.Rits as r on o.OpdrachtID = r.OpdrachtID
WHERE a.UserName = "dimitrivantillo@gmail.com"
AND r.Datum > "1-12-2016";

代码片段 allready 显示了一些我已经尝试过但不起作用的东西(而 DateTime.Now 只是为了尝试一些东西)。所以我正在寻找一些关于如何解决这个问题的指导。我在寻找正确的方向吗?我发现其他一些主题或多或少有相同的问题,但与我的情况还不够接近。

导出到 excel 功能正在运行,但我的最终目标是通过不查询所有表行而仅查询特定月份来保存数据库。我一直在考虑只获取所有行并在之后过滤特定月份,但最终不会消耗大量资源吗? (几年后)。

另请注意,我说的是荷兰语。 Chauffeur = drivers,Opdracht = Assignment,Rit = drive

感谢阅读并希望对我有所帮助:D

编辑:包含本身正在工作,我得到了所有必要的数据但没有过滤的相关对象。所以所有驱动器而不是特定月份的驱动器,因为 where 函数不起作用

最佳答案

Include 无法过滤。但是,应用我解释的内容 here ,但更深一层,您可以通过以下方式实现您想要的:

_ctx.Configuration.LazyLoadingEnabled = false;
var user = _ctx.Users
.Where(u => u.Id == id)
.Select(u => new
{
User = u,
Opdrachten = u.Opdrachten,
Ritten = u.Opdrachten
.SelectMany(o => o.Ritten
.Where(r => r.Datum == DateTime.Now))
})
.SingleOrDefault();
return user?.User;

查询将您需要的所有数据收集到上下文的缓存中,EF 通过关系修复 将它们相互连接。因此,每个 Opdracht 都会有一个 Ritten 集合,该集合仅包含今天的项目。

延迟加载已禁用,否则当您访问它们时,EF 仍会从数据库填充导航属性。

关于mysql - 过滤相关对象的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41403713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com