asp.net-mvc - 我的 Include withWhere 查询似乎有问题

标签 asp.net-mvc entity-framework-core

请注意,这些只是主类别和子类别(Level1Set、Level2Set)

enter image description here

我的模型分别:

    public class Level1Set

    public int Id { get; set; }
    [StringLength(42)]
    public string Name { get; set; } = "";
    public bool IsActive { get; set; }
    public virtual IEnumerable<Level2Set> Level2Sets { get; set; }

    public class Level2Set

    public int Id { get; set; }
    public string Name { get; set; } = "";
    public int? Level1SetId { get; set; }
    public bool IsActive { get; set; }
    public virtual Level1Set Level1Set { get; set; }

我第一次使用 Include withWhere 查询,但这一切看起来很平常。不过,大多数示例都是针对列表结果的。

我只想拉出一个子类别进行编辑,并包含它所属的主类别。

var result = dBcontext.Level1Sets
                      .Include(l2 => l2.Level2Sets.Where(c => c.Id == id.Value))
                      .FirstOrDefault();

因此,对于 Id=1,我得到了正确的结果。然而,对于 Id=2 或 3,我得到完全错误的结果。无子类别且主类别不正确。

enter image description here

这里有什么不正确的地方,最终对于这种情况什么是正确的查询。另外还有两次对数据库的调用。

谢谢。

最佳答案

根据经验,您可以获取要查询的实体,然后从那里包含。在你的情况下,它是一个 Level2Sets。

dBcontext.Level2Sets.Include(x => x.Level1Set).FirstOrDefault(l2 => l2.Id == id.Value)

关于您的后续问题:

if we use FirstOrDefault for the predicate, then what is the WHERE for ?

如果您根据条件需要多个实体,则需要“Where”。例如:

dBcontext.Level1Sets.Include(l2 => l2.Level2Sets.Where(c => c.IsActive)).FirstOrDefault();

因此,您将获得一个 Level1Set 和所有相关的事件 Level2Set

关于asp.net-mvc - 我的 Include withWhere 查询似乎有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76589817/

相关文章:

asp.net-mvc - 如何使用 dotnet 构建 .NET Framework ASP.NET 应用程序

asp.net-mvc - ASP.NET MVC 1 - 在 ViewModel 中调用 Session 对象

asp.net-mvc - 在ASP.NET MVC 3 Razor 中识别HTML助手的问题

asp.net-core-mvc - 如何防止 Entity Framework Core 2.0 重命名生成的类中的表和列(数据库优先)

c# - 由于支持字段,EF-Core 代码首先抛出错误的问题

c# - 尽管设置了精度,但 MSSQL 表中的十进制数会四舍五入

asp.net - MVC 适合我吗?

c# - 将 webapi 添加到 mvc 应用程序 - 路由

c# - SelectMany 应用于 3 个列表

azure-devops - 仅在 ARM 模板部署后才知道 ConnectionString 时如何生成 EF Core 迁移脚本?