Linq - объединить две таблицы и считать - PullRequest
0 голосов
/ 25 марта 2020

Имеют две таблицы:

Каталог

|----------|----------|-----------|
|   Id     |   Name   | CreatedBy |
|----------|----------|-----------|
|    1     | Catalog1 |     1     |
|    2     | Catalog2 |     1     |
|    3     | Catalog3 |     1     |
|    4     | Catalog4 |     2     |
|----------|----------|-----------|

TemplateOnCatalog

|------------|-----------|
| TemplateId | CatalogId |
|------------|-----------|
|    1       |     1     |
|    2       |     2     |
|    3       |     1     |
|    4       |     2     |
|    5       |     2     |
|    6       |     4     |
|------------|-----------|

Используя c# и Linq, как получить список всех каталогов, где CreatedBy = 1, и подсчитать количество шаблонов в каталоге. Если шаблонов нет, значение счетчика должно быть 0 (или пустым).

Ожидаемый результат:

|------------|-------------|-------------------|
| CatalogId  | CatalogName | NumberOfTemplates |
|------------|-------------|-------------------|
|    1       |  Catalog1   |        2          |
|    2       |  Catalog2   |        3          |
|    3       |  Catalog3   |        0          |
|------------|-------------|-------------------|

Я пытаюсь сделать следующее, но каталоги без шаблонов не принимаются:

var templateCatalogs =
from templateCatalog in db.Catalog.AsNoTracking()
join totc in db.TemplateOnCatalog
    on templateCatalog.Id equals totc.CatalogId 
where
    templateCatalog.CreatedBy == 1
    orderby templateCatalog.Name
    group new { templateCatalog, totc } 
            by new { templateCatalog.Name, templateCatalog.Id } into result
    select new
    {
        CatalogId = result.Key.Id,
        CatalogName = result.Key.Name,
        NumberOfTemplates = result.Count()
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...