2012-07-14 68 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(); 

我希望這將有助於