2017-02-27 40 views
0

我有3個SalaryEstimates A, B and CLINQ制:公共職位選擇SalaryEstimates計數

我要輸出SalaryEstimates (Number of Jobs)

A (20 jobs) 
B (32 jobs) 

C的溫度將不出去BEC順帶下它的工作是不公開的,不會被刪除

下面是我的代碼,它能夠輸出我想要的,但它有點長。有沒有更好的辦法?

var publicJobsQuery = _dbContext.Jobs 
    .Where(j => j.IsDeleted.Equals(false)) 
    .Where(j => j.IsPrivate.Equals(false)); 

var jobsIdHs = new HashSet<int>(publicJobsQuery.Select(j => j.JobId)); 

var salaryEstimatesWithJobs = _dbContext.SalaryEstimates 
    .Include(s => s.Jobs) 
    .Where(s => s.Jobs.Any(j => jobsIdHs.Contains(j.JobId))) 
    .Select(s => new SalaryEstimatesWithJobCountViewModel 
    { 
     SalaryEstimate = s, 
     JobCount = s.Jobs.Count(j => jobsIdHs.Contains(j.JobId)) 
    }); 

回答

0

嗯,你可以通過Jobs開始查詢,而不是通過應用組:

var salaryEstimatesWithJobs = _dbContext.Jobs 
           .Include(s => s.SalaryEstimates) 
           .Where(j => !j.IsDeleted && !j.IsPrivate) 
           .GroupBy(e=>e.SalaryEstimateId) 
           .Select(g => new SalaryEstimatesWithJobCountViewModel 
              { 
              SalaryEstimate = g.FirstOrDefault().SalaryEstimate, 
              JobCount = g.Count() 
              });