嵌套的 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表包含我要显示的相应名称
因此,我设法使用以下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();