2014-07-07 32 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();