在解决这个问题上有一些问题。
select *,(select top 1 chicken_nr from chicken_photo where code =code order by sort)作为来自鸡的照片
代码是表鸡中的一列
基本上就是拿到这只鸡的封面照片。
为了更清楚起见,我想让它从表鸡返回多个行。但只有一个来自chicken_photo的条目。
var q = from chicken in data.chickens
join photos in data.chicken_photos
on chicken.Code equals photos.chicken
where chicken.Lang==lang && chicken.photographer_nr == nr
group chicken by new {chicken.photographer,photos.Photograph_Nr,chicken.Title,chicken.Code} 发布于 2012-08-25 04:09:59
这确实可以这样做,使得它只在下面产生一个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()
};最后,为了保持完全一致并且只使用lambda表达式:
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 17:17:10
我想通了。
非常明显,实际上,太明显了:)
var q = from chicken in data.chickens
where chicken.photographer_nr == nr && lang == chicken.Lang
select new { chicken.photographer, chicken.Code, chicken.Title,Photo = (from b in data.chicken_photos where b.chicken==chicken.Code orderby b.Sort select b.Photograph_Nr).FirstOrDefault() };发布于 2010-07-17 16:49:48
var photo = (from c in chicken_photo where c.code = chicken orderby c.sort select c.chicken_nr).Take(1).SingleOrDefault();你真的应该更充实你的问题...
https://stackoverflow.com/questions/3270843
复制相似问题