我有两个Entity Framework Core实体:
public class JobOrder {
public int Id { get; set; }
public string JobTitle { get; set; }
public string Status { get; set; }
...
public IEnumerable<JobOrderUser> JobOrderUsers { get; set; }
}
public class JobOrderUser {
public int AppUserId { get; set; }
public AppUser User { get; set; }
public int JobOrderId { get; set; }
public JobOrder JobOrder { get; set; }
}
第二个是用于JobOrder和User表之间多对多的连接表,但我不需要钻取到User表。
我想获得一个与特定用户有关联的JobOrders集合。在SQL中,我会写这样的东西:
select distinct
a.*
from
JobOrders a
join JobOrderUser b on a.JobOrderID = b.JobOrderId
where
b.AppUserId = someId
如何使用LINQ方法语法?
答案 0 :(得分:0)
如果您的实体设置正确且关系完好无损,则可以在查询JobOrderUsers
时加载JobOrder
,然后由用户进行过滤。像
JobOrder.Include(t => t.JobOrderUsers).Where(t => t.JobOrderUsers.Any(x => x.User.Id == SomeId));
答案 1 :(得分:0)
您还可以使用Select
类中的连接和jobOrdersDto
所需列数据来使用以下查询。为此,您必须将_jobOrdersRepository
和_jobOrderUserRepository
存储库注入您调用所需方法的服务。
var result = (from jobOrders in _jobOrdersRepository.GetAll()
join jobOrderUser in _jobOrderUserRepository.GetAll() on jobOrders.JobOrderID equals jobOrderUser.JobOrderId
where
(jobOrderUser.AppUserId == someId)
select new jobOrdersDto
{
}
您的服务类:
public class YourService
{
private readonly IRepository<jobOrders> _jobOrdersRepository;
private readonly IRepository<jobOrderUser> _jobOrderUserRepository;
public YourService(
IRepository<jobOrders> jobOrdersRepository, IRepository<jobOrderUser> jobOrderUserRepository)
: base()
{
_jobOrdersRepository = jobOrdersRepository;
_jobOrderUserRepository = jobOrderUserRepository;
}
}