使用linq连接三个表
我有三张表格:使用linq连接三个表,linq,entity-framework,code-first,Linq,Entity Framework,Code First,我有三张表格: public class Description { public int DescriptionID { get; set; } // Attributes public virtual List<Image> Image { get; set; } } public class Image { public int ImageID { get; set;
public class Description
{
public int DescriptionID { get; set; }
// Attributes
public virtual List<Image> Image { get; set; }
}
public class Image
{
public int ImageID { get; set; }
// Attributes
[Required]
public int DescriptionID { get; set; }
[ForeignKey("DescriptionID")]
public virtual Description Description { get; set; }
public virtual List<ImageSection> ImageSection { get; set; }
}
public class ImageSection
{
public int ImageSectionID { get; set; }
// Attributes
public int? ImageID { get; set; }
[ForeignKey("ImageID")]
public virtual Image Image { get; set; }
}
公共类描述
{
public int DescriptionID{get;set;}
//属性
公共虚拟列表映像{get;set;}
}
公众阶级形象
{
公共int-ImageID{get;set;}
//属性
[必需]
public int DescriptionID{get;set;}
[外键(“描述ID”)]
公共虚拟描述{get;set;}
公共虚拟列表ImageSection{get;set;}
}
公开课影像组
{
public int ImageSectionID{get;set;}
//属性
public int?ImageID{get;set;}
[外键(“图像ID”)]
公共虚拟映像映像{get;set;}
}
我有
说明ID
。获取所有具有该描述ID的ImageSection的linq是什么?这应该可以做到
var descriptions = new List<Description>();
var descriptionId = 1;
var result =
descriptions.Where(d => d.DescriptionID == descriptionId).SelectMany(
im => im.Image.SelectMany(ims=> ims.ImageSection));
var descriptions=新列表();
变量描述ID=1;
var结果=
descriptions.Where(d=>d.DescriptionID==DescriptionID)。选择Many(
im=>im.Image.SelectMany(ims=>ims.ImageSection));
我希望这将有所帮助鉴于问题的描述,您似乎不需要加入三个表。由于您已经有了要加入的DescriptionID
,因此可以忽略Description
表
试试这个:
var query1 =
from i in db.Images
where i.DescriptionID == descriptionID
join s in db.ImageSections on i.ImageID equals s.ImageID
select s;
但是,由于您的表定义已经包含子集合,您可以执行基本的SelectMany
,而不必担心连接本身
可以尝试以下方法:
var query2 =
from d in db.Descriptions
where d.DescriptionID == descriptionID
from i in d.Image
from s in i.ImageSection
select s;
var query2 =
from d in db.Descriptions
where d.DescriptionID == descriptionID
from i in d.Image
from s in i.ImageSection
select s;