Linq查询帮助

时间:2010-11-06 22:39:52

标签: linq linq-to-sql

我有以下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,这将更容易。如何修改我的查询来执行此操作?

感谢。

1 个答案:

答案 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)
}