我有以下Linq查询:
from etamodule in ETAModule
join eta in ETA on etamodule.ExpID equals eta.ExpID
where etamodule.SubID== "101106261013"
select new { etamodule }
ETAModule与ETA的关系为1:1。但是,数据库中没有强制执行此操作的FK(不幸的是)。构建我的查询的方式很好,但我想将每个ETAModule实体的ETA实体包含在ETAModule实体的属性中。当然,如果存在FK,这将更容易。如何修改我的查询来执行此操作?
感谢。
答案 0 :(得分:1)
您可以通过将eta添加到匿名类型中来最简单地在最终投影中包含eta:
from etamodule in ETAModule
join eta in ETA on etamodule.ExpID equals eta.ExpID
where etamodule.SubID== "101106261013"
select new { etamodule, eta }
如果你想让eta成为etamodule的属性,你需要定义一个具有这个属性的类,例如ModuleWithETA。然后,您可以按如下方式进行投影:
...
select new ModuleWithEta
{
ID = etamodule.ID,
Name = etamodule.Name,
...
ETA = eta
}
如果你想要左外连接的等价物(包括所有的etamodules,无论它们是否有ETA),那么按如下方式更改你的查询:
from etamodule in ETAModule
where etamodule.SubID = "..."
select new
{
etamodule,
eta = ETA.FirstOrDefault (e => e.ExpID == etamodule.ExpID)
}