使用Lambda表达式连接表格

3

我在MVC方面很新,我在仓储模式中遇到了一个非常大的问题,有人能帮助我如何在仓储模式下在两个表之间进行连接和分组吗?以下是代码:

 public class GenericTestRepository<TEntity> where TEntity:class
{

internal CentralEntities context;
internal DbSet<TEntity> dbSet;


public GenericTestRepository(LTWCentralEntities context )
{
    this.context = context;
    this.dbSet = context.Set<TEntity>();
}


public virtual IEnumerable<TEntity> Get(
    Expression<Func<TEntity, bool>> filter = null,
    Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
    string includeProperties = "")
{
    IQueryable<TEntity> query = dbSet;

    if (filter != null)
    {
        query = query.Where(filter);
    }

    foreach (var includeProperty in includeProperties.Split
        (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
    {
        query = query.Include(includeProperty);
    }

    if (orderBy != null)
    {
        return orderBy(query).ToList();
    }
    else
    {
        return query.ToList();
    }
 }


}

这是我的UnitOfWork:

   private CentralEntities context = new CentralEntities();
   private GenericRepositoryTest<User> usrRepo;
   private GenericRepositoryTest<MasterData> mastrData;

   public GenericRepositoryTest<User> UserRepo
  {
     get
     {
         return this.usrRepo ?? new GenericRepositoryTest<User>(context);
      }
  }

   public GenericRepositoryTest<MasterData> MastrData
   {
     get
     {
       return this.MastrData ?? new GenericRepositoryTest<MasterData>
 (context);
     }
 }

在我的控制中,我希望将这两个表联接起来,但我不知道如何操作。如果没有仓库和工作单元模式,我会按照以下步骤进行操作:

 private CentralEntities DB = new CentralEntities();
    var listOfParks = (from s in DB.MasterDatas
                       join t in DB.Users1
                       on s.pv_person_resp_id equals t.user_id                                                           
                       select new SelectListItem
                       {
                           Text = t.user_name
                       }).Distinct().OrderBy(m=>m.Text).ToList();

我的控制器:

UnitOfWorkForTest _unitofWork=new UnitOfWorkForTest ();

但现在我有了仓储和工作单元,我该如何使用Lambda表达式进行连接并使用我的仓储和工作单元?谢谢。


这是什么语言?Java?C#?你需要在问题中标记你正在使用的语言。 - jwodder
@PeterB 好的,我正在编辑我的问题。 - papagallo
@PeterB 我已经编辑了我的问题。 - papagallo
你能展示一下你的类和构造函数吗?你是想在哪里使用这个查询? - Rasik
1
@aakash 我正在我的控制器中使用它,这就是我卡住的地方。 - papagallo
显示剩余5条评论
1个回答

0

在你的 UnitOfWork 中进行更改

public GenericRepositoryTest<MasterData> MastrData
{
   get
    {
      return this.mastrData ?? new GenericRepositoryTest<MasterData>(context);
    }
}

在你的GenericRepositoryTest类中添加以下方法。
public IQueryable<TEntity> GetAll()
{
    return _dbSet;
}

最后,在您的控制器上:

UnitOfWorkForTest _unitofWork=new UnitOfWorkForTest ();

 var listOfParks = (from s in _unitofWork.MastrData.GetAll()
                   join t in _unitofWork.UserRepo.GetAll()
                   on s.pv_person_resp_id equals t.user_id                                                           
                   select new SelectListItem
                   {
                       Text = t.user_name
                   }).Distinct().OrderBy(m=>m.Text).ToList();

希望这对你有所帮助!


使用 IQueryable 而不是 IList - Eldho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接