2012-07-14 71 views
0

表我有三个表为:连接三个使用LINQ

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; } 

    } 

我有DescriptionID。什么是linq来获得所有具有该DescriptionID的ImageSection

回答

0

好像你并不需要加入给你的问题的说明三个表。由于您已经有了想要加入的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; 
0

这应该做的伎俩

var descriptions = new List<Description>(); 

      var descriptionId = 1; 

      var result = 
       descriptions.Where(d => d.DescriptionID == descriptionId).SelectMany(
        im => im.Image.SelectMany(ims=> ims.ImageSection)); 
1
var result = dbContext.Images.Include(i => i.ImageSections) 
       .Where(j => j.DescriptionID == 1) 
       .SelectMany(im => im.ImageSections).ToList(); 

我希望这将有助于