0

我正在尝试使用 MVC3 构建网上商店。我正在使用 EF,并且我有一个接口来处理我的实体上下文:

public interface IBaseRepository<T> where T : class, IBase, new()
{
    IQueryable<T> Get();
}

和一个使用此接口的抽象类:

 public abstract class BaseRepository<T> : 
       IBaseRepository<T> where T : class, IBase, new()
{
    protected abstract ObjectSet<T> EntitySet { get; }

    public virtual IQueryable<T> Get()
    {
        return from obj in EntitySet select obj;
    }
}

所以我可以使用这个解决方案来处理我的数据库(SQL)中的不同表。我还不能发图片。所以我将尝试描述我的数据库:

[产品] - [CategoryProduct(ProductID,CategoryID)] - [Category(ShortName)]

  1. 表产品
  2. 具有字段 ShortName 的表类别
  3. 表 CategoryProduct 与字段 ProductID,CategoryID 建立多对多链接。

(我们离问题越来越近了......)

我有一个方法,它从表“Category”中获取“ShortName”(“repository”是仅用于一个表的 dbcontext - “Category”)并且我需要在我的视图中返回 IEnumerable<> 的产品:

public ActionResult GetProductInCategory(string shortName)
{
       IEnumerable<Product> = repository.Get()......
        return View();
}

所以这就是问题所在:我需要使用 lambda 进行查询以从这 3 个表中获取产品,但我不明白如何做到这一点。

我不能使用 linq,因为我只能直接访问整个数据库中的一个表。

很抱歉解释不好,如果您对建筑有任何疑问以获得整体观点,我会尽力回答您。

4

1 回答 1

0

我假设/猜测您使用的EntitySet是 EntityFramework 并且您在实体类中有这个结构

Category
+ShortName
+EntityCollection<CategoryProduct> CategoryProduct

CategoryProduct
+Product

所以你可以在你的 linq 查询中这样做:

BaseRepository<Category> repository = //get your CATEGORY repository
IEnumerable<Product> = repository.Get().Where(c=> c.ShortName == shortName)
                                       .SelectMany(cp => cp.CategoryProduct)
                                       .Select(p => p.Product).ToList();
于 2012-04-12T09:32:06.090 回答