我试图在第二个查询的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 ?
编辑:
为了更清楚,我尝试进行三重连接:
答案 0 :(得分:0)
所以我设法使用以下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();