[英]How to implement a generic method in Repository to make joins in linq
您好,我有一个linq查询,该查询在表上进行多个联接,最终返回单行。
目前,我已经使用了返回单行的通用方法GetAll()
。
我写的查询如下:
from h in _repositoryWorkers.GetAll()
join p in _repositoryJobs.GetAll() on h.Id equals p.THI_N_ID
join q in _repositoryHome.GetAll() on h.Id equals q.THI_N_ID
public Repository()
{
this.context = new WorkersContext();
entities = context.Set<T>();
}
public IEnumerable<T> GetAll()
{
return entities.AsEnumerable<T>();
}
我想要实现的是以下示例:
from w in repo.Query<Worker>()
join e in repo.Query<XEntity>() on ...
我不想使用仅返回单行的列表。 我只想返回此行的对象。
请指教。
孤立地,我会写类似的东西:
var result = context.Worker()
.Include(worker => worker.XEntity)
.Where(worker => worker.ID == id)
.SingleOrDefault();
结果将是填充了XEntity的单个Worker实体,或者如果没有匹配ID的条目,则为null。
您如何使其通用?
在过去的几年中,我尝试了很多事情,最后,我发现特定的方法效果最好。 因此,我将为这些简单的东西提供一个通用的基础存储库,但是当我需要执行此类操作时,将对其进行扩展。
所以,我会对它扩展了通用基工人实体特定的资源库。 它将具有如下方法:
public Worker GetByIdWithXEntity(id)
{
this.Queryable()
.Include(worker => worker.XEntity)
.Where(worker => worker.ID == id)
.SingleOrDefault();
}
(可查询是在基座储存库中的受保护的方法)
这种方法有点像大型项目的皮塔饼,但是我发现它很好用,因为它将所有数据访问逻辑保留在Repo中,它使您的服务的单元测试变得简单,并且非常清楚正在发生的事情。
也就是说,如果任何人有一个更好的办法,我很想听听吧!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.