2014-07-07 35 views
0

我正在使用實體框架。如果有一個表Category與列categoryid作爲整數數據類型的外鍵,而另一個表Products作爲具有列id作爲也是整數數據類型的主鍵,我必須應用兩個表的連接。使用lambda表達式在Linq中加入表格

現在我只需要從Products表中選擇那些有id的記錄,它包含在Category表中。

這是我的代碼:

string categoryid= "10,11,12"; 

datalist.DataSource = (from p in objCategory 
          join q in objProducts on p.categoryid.contains(q.id) 
          select new 
          { 
           p.FilePath, 
           p.ItemName, 
           p.Description, 
           q.image_url, 
           q.name, 
           q.price 
          }).ToList(); 

回答

2

你可以是這樣的:

List<int> categoryIds = new List<int>(){ 10, 11, 12 }; 

datalist.DataSource = (from c in objCategory 
         join p in objProducts 
         on c.categoryid equals p.categoryid 
         where categoryIds.Contains(c.categoryid) 
         select new 
         { 
          c.FilePath, 
          c.ItemName, 
          c.Description, 
          p.image_url, 
          p.name, 
          p.price 
         }).ToList(); 
1

而是獲取所有的數據到內存中,然後加入它是更好地使導航性能和獲取數據的通過這些屬性。在這種情況下,所有的連接都可以在數據庫中工作,並且只會從數據庫中獲得過濾的數據。解決方案將工作像

class Category 
{ 
    public int CategoryId { get; set; } 
    public string Description{ get; set; } 
    public string FilePath {get;set;} 
    public string ItemName {get;set;} 

    public virtual ICollection<Product> Product{ get; set; } 
} 

class Product 
{ 
    public int ProductId { get; set; } 
    public string name{ get; set; } 
    public int CategoryId { get; set; } 
    public string Product.image_url {get;set;} 
    public int price {get;set;} 

    public virtual Category Category{ get; set; } 
} 

現在你只需要調用下面的查詢

datalist.DataSource = (from p in objCategory.Include("Product")        
         select new 
         { 
          p.FilePath, 
          p.ItemName, 
          p.Description, 
          p.Product.image_url, 
          p.Product.name, 
          p.Product.price 
         }).ToList();