这的确可以做到这样的,它导致只有一个SQL查询下方。
如果您执行了针对实体框架编写的子查询,那么Linq查询将成为单个SQL查询。
var q = from chicken in data.chickens
where chicken.photographer_nr == nr && chicken.Lang == lang
select new
{
chicken.photographer,
chicken.Code,
chicken.Title,
Photo = (from cp in data.chicken_photos
where cp.chicken == chicken.Code
orderby cp.Sort
select cp.Photograph_Nr).FirstOrDefault()
};
如果你的表有合适的主键和外键关系,并在实体框架适当的导航关联,那么你也可以达到相同的结果是这样的:
var q = from chicken in data.chickens
where chicken.photographer_nr == nr && chicken.Lang == lang
select new
{
chicken.photographer,
chicken.Code,
chicken.Title,
Photo = c.chicken_photos.Select(cp => cp.Photograph_Nr).FirstOrDefault()
};
最后,留下完全一致和仅使用拉姆达表达式:
var q = data.chickens
.Where(c => chicken.photographer_nr == nr && chicken.Lang == lang)
.Select(c => new
{
c.photographer,
c.Code,
c.Title,
Photo = c.chicken_photos.Select(cp => cp.Photograph_Nr).FirstOrDefault()
}
);
我宁愿依靠实体导航,因为它迫使开发人员创建正确的导航实体框架中的联系和数据库中正确的外键关系。这几乎总是会导致优化下面的SQL。
这不总是取决于开发者如何构建数据库,因此您可能必须坚持第一种方法并自己编写子选择。
鸡单打网站? – 2010-07-17 08:48:43
实际上它是为鸡农做杂交,所以我猜,是的。 – hreinn1000 2010-07-17 08:49:42