gpt4 book ai didi

c# Lambda 查询奇怪地获取属性之一 null

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

    [HttpGet]
public ActionResult SecondMission(string Id)
{
CATSDDEntities db = new CATSDDEntities();
db.Configuration.ProxyCreationEnabled = false;
var setAlet= db.Setalets.Where(x => x.Aletler.Barkod == Id && x.Bolum == 1).Include(x => x.Aletler.AletAD).Include(x => x.Setler).FirstOrDefault();
if (setAlet == null)
{
return Json("Error, Alet Not Found!", JsonRequestBehavior.AllowGet);
}
else
{
setAlet.Bolum = 2;
db.SaveChanges();
var MissionTwoSets = db.Setalets.Where(x => x.Bolum == 2 && x.SetId==setAlet.SetId).Include(x => x.Aletler.AletAD).Include(x => x.Setler).GroupBy(x => x.SetId).ToList();
return PartialView("~/Views/Shared/_SecondMissionSetPartial.cshtml", MissionTwoSets);
}
}

我是通过ajax调用这个方法

当我第一次调用这个方法时.. MissionTwoSetsAletler 属性有数据..但是当我第二次调用这个方法并获取多个数据时..其中一个Aletler( LOOK ) 中的项目为空..这很奇怪..我在其他地方使用相同的代码使用相同的数据并且工作正常..

最佳答案

IncludeGroupBy 查询中被忽略(没有效果),因此导航属性通常为 null

然而,您所看到的是上下文跟踪的结果。由于您首先加载单个实体,因此它的预加载属性不是 null。然后,当您执行 GroupBy 时,其结果包括已加载(跟踪)的实体,然后 EF 会重用该实例,因此它仍会填充导航属性。由于前面提到的“忽略包含”,所有其他实体将具有 null 导航属性。

由于像这样的 GroupBy 查询在服务器端执行是没有意义的(没有等效的 SQL),解决方案是在客户端执行 GroupBy 部分(通过在它之前插入典型的 AsEnumerable()),从而使包含生效:

var MissionTwoSets = db.Setalets
.Where(x => x.Bolum == 2 && x.SetId==setAlet.SetId)
.Include(x => x.Aletler.AletAD)
.Include(x => x.Setler)
.AsEnumerable() // <-- switch to LINQ to Objects
.GroupBy(x => x.SetId)
.ToList();

关于c# Lambda 查询奇怪地获取属性之一 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51544817/

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