LINQ 2 левых объединяется с Sum - PullRequest
0 голосов
/ 30 декабря 2011

Я пытаюсь выполнить относительно простой SQL-запрос с помощью linq:

SELECT ir.resource_id, r.first_name, r.surname, rt.job_title, SUM(plan_ts_hours), SUM(ts_hours) FROM tbl_initiative_resource ir
INNER JOIN tbl_resource r ON ir.resource_id = r.resource_id
INNER JOIN tbl_resource_type rt ON rt.resource_type_id = r.resource_type_id
LEFT JOIN tbl_plan_timesheet pts on pts.resource_id = ir.resource_id AND pts.initiative_id = ir.initiative_id
LEFT JOIN tbl_timesheet ts on ts.resource_id = ir.resource_id AND ts.initiative_id =     ir.initiative_id
WHERE ir.initiative_id = 111
GROUP BY ir.resource_id, r.first_name, r.surname, rt.job_title

После прочтения этого блога: http://smehrozalam.wordpress.com/2010/04/06/linq-how-to-build-complex-queries-utilizing-deferred-execution-and-anonymous-types/

Я придумал следующее linq:

var query = (from initRes in Context.tbl_initiative_resource
                     join res in Context.tbl_resource on initRes.resource_id equals res.resource_id
                     join resType in Context.tbl_resource_type on res.resource_type_id equals resType.resource_type_id
                     from tsheet in Context.tbl_timesheet.Where(x => x.resource_id == initRes.resource_id).Where(x => x.initiative_id == initRes.initiative_id).DefaultIfEmpty()
                     from plannedtsheet in Context.tbl_plan_timesheet.Where(x => x.resource_id == initRes.resource_id).Where(x => x.initiative_id == initRes.initiative_id).DefaultIfEmpty()
                     where initRes.initiative_id == initiativeID
                     group new { ID = res.resource_id, ResourceType = resType.job_title, Times = tsheet, P = plannedtsheet } by initRes.resource_id into g
                     select new
                     {
                         ResourceID = g.Key,
                         Hours = g.Sum(x => (decimal?)x.Times.ts_hours),
                         PlannedHours = g.Sum(x => (decimal?)x.P.plan_ts_hours)
                     }).ToList();

Есть идеи, как получить доступ к ResourceType при выборе нового анонимного типа?

1 Ответ

0 голосов
/ 31 декабря 2011

ResourceType является частью ключа группировки, поэтому g.Key.ResourceType должен сделать это.

(Проверьте тип ResouceID в результатах, так как вы его присвоили g.Key, это будет экземпляр (анонимного) типа, созданный в предложении group.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...