我有一个名为CategoryProducts的连接表,包含2个字段(CategoryId,ProductId)。我试图弄清楚将所有产品对象放在一个类别中的正确方法。
这就是我所拥有的:
// get list of all of the products in a category
public static IEnumerable<Product> GetList(int categoryId)
{
using (var context = new AppContext())
{
var pList= (from p in context.Products
join cp in context.CategoryProducts on categoryId equals cp.CategoryId
select p).ToList();
return pList;
}
}
答案 0 :(得分:3)
试试这个:
var pList= (from p in context.Products
join cp in context.CategoryProducts on p.Id equals cp.ProductId
where cp.CategoryId==categoryId
select p).ToList();
您需要使用在每个源中共享的某些值进行连接,并且可以进行相等性比较。通常在Linq to Entities中基于表之间的逻辑关系。例如,在您的情况下,我认为您在Products
和CategoryProducts
之间存在一对多关系。正确的加入方式是使用Product
的PK和CategoryProduct
上的关系的FK。
此外,如果CategoryProduct
实体具有以下结构:
public class CategoryProduct
{
public int ProductId{get;set;}
public int CategoryId{get;set;}
public virtual Category Category{get;set;}
public virtual Product Product{get;set;}
}
你可以这样做:
var query= context.CategoryProducts.Where(cp=>cp.CategoryId==categoryId).Select(cp=>cp.Product);
答案 1 :(得分:0)
如果您有这些实体之间的关系,那么您只需选择Categories
并加入Products
:
var result = context.CategoryProducts.
Where(c=>c.CategoryId == categoryId ).Include(c => c.Products).ToList();