使用lambda表达式在Linq中连接表

时间:2014-07-07 08:20:18

标签: c# asp.net sql linq lambda

我正在使用Entity Framework。我必须应用两个表的连接但我想要的是,如果有一个表Category,列categoryid作为外键,它是整数数据类型,另一个表Products,列{ {1}}作为主键,也是整数数据类型。

现在我只需要从id表中选择Products表中包含id的记录。

这是我的代码:

Category

2 个答案:

答案 0 :(得分: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 :(得分: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();