联接或多个DBContext存储库通用c#

联接或多个DBContext存储库通用c#,c#,entity-framework,linq,join,repository-pattern,C#,Entity Framework,Linq,Join,Repository Pattern,我有一个通用的存储库,我在其中执行Get、Update、Insert等方法 我使用这种方法从数据库中的表中获取数据 public IEnumerable<typeEntity> Get<typeEntity>(Expression<Func<typeEntity, bool>> newObjectEntity,int page, int rowsByPage) where typeEntity : class { List&

我有一个通用的存储库,我在其中执行Get、Update、Insert等方法

我使用这种方法从数据库中的表中获取数据

 public IEnumerable<typeEntity> Get<typeEntity>(Expression<Func<typeEntity, bool>> newObjectEntity,int page, int rowsByPage) where typeEntity : class
    {
       List<typeEntity> Result = null;
            Result = Context.Set<typeEntity>().Where(newObjectEntity).OrderBy(m => true).Skip<typeEntity>(5 * (page - 1)).Take<typeEntity>(rowsByPage).ToList<typeEntity>();
        return Result;
    }

总之,我如何从存储库Generic获得数据使用联接。

我找到了一个表单,通过include在存储库Generic中获取此结果,例如产品和类别

 public IEnumerable<typeEntity> Get<typeEntity>(Expression<Func<typeEntity, bool>> newObjectEntity,int page, int rowsByPage, string include) where typeEntity : class
    {
       List<typeEntity> Result = null;
            Result = Context.Set<typeEntity>().Where(newObjectEntity).include(include).OrderBy(m => true).Skip<typeEntity>(5 * (page - 1)).Take<typeEntity>(rowsByPage).ToList<typeEntity>();
        return Result;
    }
public IEnumerable Get(表达式newObjectEntity,int-page,int-rowsByPage,string-include),其中typeEntity:class
{
列表结果=空;
Result=Context.Set().Where(newObjectEntity).include(include).OrderBy(m=>true).Skip(5*(第1页)).Take(rowsByPage.ToList();
返回结果;
}

使用include,您可以字符串例如Product->Category并获取此对象。

您找到的解决方案很慢,因为存储库方法正在立即具体化/执行查询,而不允许延迟执行。尝试从存储库方法内的查询中删除“.ToList()”:

public IEnumerable<typeEntity> Get<typeEntity>(Expression<Func<typeEntity, bool>> newObjectEntity,int page, int rowsByPage) where typeEntity : class
{
   IEnumerable<typeEntity> Result = null;
        Result = Context.Set<typeEntity>().Where(newObjectEntity).OrderBy(m => true).Skip<typeEntity>(5 * (page - 1)).Take<typeEntity>(rowsByPage);
    return Result;
}
public IEnumerable Get(表达式newObjectEntity,int page,int rowsByPage),其中typeEntity:class
{
IEnumerable结果=null;
Result=Context.Set().Where(newObjectEntity).OrderBy(m=>true).Skip(5*(第1页)).Take(rowsByPage);
返回结果;
}

这将允许您编写和构造更高阶的查询,而无需立即将整个表拉入内存。

此代码与entity framework在导入存储过程时生成的代码非常相似。如果要执行联接,无论实现如何,都必须具有正确的对象。下面是Microsoft提供的一个简单示例,介绍如何编写左外部联接,但也包含其他LINQ函数的更深入列表。将IEnumerable替换为IQueryable。只有在这种情况下,查询才会有效。您好,您可以进行性能测试
select p.idProducts from products p join category c on p.idCategory = c.idCategory
 public IEnumerable<typeEntity> Get<typeEntity>(Expression<Func<typeEntity, bool>> newObjectEntity,int page, int rowsByPage, string include) where typeEntity : class
    {
       List<typeEntity> Result = null;
            Result = Context.Set<typeEntity>().Where(newObjectEntity).include(include).OrderBy(m => true).Skip<typeEntity>(5 * (page - 1)).Take<typeEntity>(rowsByPage).ToList<typeEntity>();
        return Result;
    }
public IEnumerable<typeEntity> Get<typeEntity>(Expression<Func<typeEntity, bool>> newObjectEntity,int page, int rowsByPage) where typeEntity : class
{
   IEnumerable<typeEntity> Result = null;
        Result = Context.Set<typeEntity>().Where(newObjectEntity).OrderBy(m => true).Skip<typeEntity>(5 * (page - 1)).Take<typeEntity>(rowsByPage);
    return Result;
}