嵌套的 LINQ 查询返回 null

本文关键字:返回 null 查询 LINQ 嵌套 | 更新日期: 2023-09-27 18:31:49

我正在尝试在第二个 where 条件中使用第一个 linq 查询的结果,如下所示:

var query = (from ds in Datacenter.datastatus
             where ds.visible == "y"
             select new
             {
                 ds.Priority,
                 ds.country.Country_Name,
                 ds.DSFromDate,
                 ds.DSToDate,
                 ds.country.ReceptionType_Id,
                 receptiontype = Datacenter.reception_type
                                           .Where(x => x.Id_reception_type == ds.country.ReceptionType_Id)
                                           .Select(x => x.Name)
                                           .FirstOrDefault()
             }).ToList();

我们可以看到我正在尝试使用字段ds.country.ReceptionType_Id来获取reception_type。与reception_type表对应的 Name 属性

除此之外,什么也不返回

但是,如果我从查询中删除以下块:

 receptiontype = Datacenter.reception_type.Where(x => x.Id_reception_type == ds.country.ReceptionType_Id).Select(x => x.Name).FirstOrDefault()

得到一个结果集,我可以看到字段的值ds.country.ReceptionType_Id存在

然后我还尝试在 where 条件中设置一个固定值,如下所示:

receptiontype = Datacenter.reception_type.Where(x => x.Id_reception_type == 1).Select(x => x.Name).FirstOrDefault()

这次我得到了一个对应于 reception_type.id = 1 的 reception_type.name 值

同样,如果我设置 x.Id_reception_type == 2 或 3 或 .,我会得到一个 reception_type.name 的值。

那么为什么我的第二个选择在 where 条件中使用固定整数值而不是ds.country.ReceptionType_Id值

编辑:

为了更清楚,我正在尝试进行三重联接,如下所示:

  • 数据状态表包含一个country_id
  • 国家/地区表包含recepetion_type_id
  • reception_type表包含我要显示的相应名称

嵌套的 LINQ 查询返回 null

因此,我设法使用以下lambda语法为完全相同的查询找到了一个有效的解决方案

var query = Datacenter.datastatus.Where(x => x.visible == "y")
                                 .Join(Datacenter.countries, 
                                       ds      => ds.Country_Id, 
                                       c       => c.Country_Id, 
                                       (ds, c) => new { ds, c })
                                 .Join(Datacenter.reception_type, 
                                       rcc      => rcc.c.ReceptionType_Id, 
                                       r        => r.Id_reception_type, 
                                       (rcc, r) => new { rcc, r })
                                 .Select(x => new 
                                                { 
                                                   x.rcc.ds.Priority,  
                                                   x.rcc.ds.country.Country_Name, 
                                                   x.rcc.ds.DSFromDate, 
                                                   x.rcc.ds.DSToDate,  
                                                   x.r.Name }
                                        ).ToList();