Как правильно трансформировать запрос из SQL в LINQ
Есть два класса:
class A {
public int Id { get; set; }
public string Name { get; set; }
}
class B {
public int Id { get; set; }
public A A { get; set; }
}
Эти же 2 класса отражены в таблицах (Oracle, но не суть - не было под рукой другой СУБД)
table A {
number Id <PK_A>
varchar2(1) Name
}
table B {
number Id <PK_B>,
number AId <FK_A>
}
Есть такой запрос (CTE приведена для примера):
with a as (
select 1 as id, 'X' as name from dual union
select 2 as id, 'Y' as name from dual),
b as (
select 1 as id, 1 as AId from dual union
select 2 as id, 1 as AId from dual union
select 3 as id, 1 as AId from dual)
-- Результирующий запрос
select a.Id, a.Name, count(1) as cnt_B
from a
left join b on a.Id = b.AId
group by a.Id, a.Name
order by a.Id
Результат:
| ID | NAME | CNT_B |
|---|---|---|
| 1 | X | 3 |
| 2 | Y | 1 |
Как в результате LinQ запроса получить такой же результат, что и в результирующем запросе?
Мои нерабочие попытки(в LINQPad):
var query = from a in A
join b in B on A equals B.A
group b by a into result
select new
{
A = result.A,
BCount = result.Count();
};
query.Dump();
--
var query = from a in A
from b in B
where b.A == a
select new
{
A = result.A,
BCount = result.Count();
};
query.Dump();
--
var query = from a in A
join b in B.DefaultIfEmpty() on a equals b.A into result
select new
{
Field1 = result.a,
BCount = result.Count()
};
query.Dump();
Подскажите пожалуйста, где неправ и куда копать. Спасибо!
Ответы (1 шт):
Автор решения: Rustam Aliev
→ Ссылка
А ларчик просто открывался:
var query = from a in A
join b in B.DefaultIfEmpty() on a equals b.A into result
select new
{
A = a,
BCount = result.Count()
};
query.Dump();
Люблю stack:
- Неделю думаешь
- Решаешь запостить вопрос сюда
- Перечисляешь возможно удачные попытки
- Самостоятельно находишь решение
- ???
- PROFIT!!11