Я разрабатываю библиотеку C# с .NET Framework 4.0 и Entity Framework 6.1.3.Воспроизведение оператора GroupBy с использованием Linq
Я хочу, чтобы получить тот же результат, что это SQL заявления:
select c.CODE_LEVEL
from CODES c
where c.CODE in
(Select CODE
from AGGREGATION_CHILDS
where PARENT_CODE = N'1')
group by c.CODE_LEVEL
с рамкой сущности.
Я использую шаблон репозитория, и я попытался это:
List<AGGREGATION_CHILDS> childrenCodeLevel =
m_AggChildRepo
.SearchFor(a => a.PARENT_CODE == aggregation.PARENT_CODE).GroupBy(a => a.Code.CODE_LEVEL).SelectMany(a => a).ToList();
С помощью этого кода я получаю список AGGREGATION_CHILDS
и мне нужно только CODE_LEVEL
значения.
SearchFor
реализация:
public IQueryable<TEntity> SearchFor(Expression<Func<TEntity, bool>> predicate)
{
return _dbSet.Where(predicate);
}
Это SQL-заявления создания таблицы:
CREATE TABLE [dbo].[CODES]
(
[CODE] [nvarchar](20) NOT NULL,
[CODE_LEVEL] [tinyint] NOT NULL,
CONSTRAINT [PK_CODES] PRIMARY KEY CLUSTERED
(
[CODE] ASC
)
)
CREATE TABLE [dbo].[AGGREGATION_CHILDS]
(
[CODE] [nvarchar](20) NOT NULL,
[PARENT_CODE] [nvarchar] (20) NOT NULL,
[POSITION] [int] NOT NULL,
CONSTRAINT [PK_AGGREGATION_CHILDS] PRIMARY KEY CLUSTERED
(
[CODE] ASC
),
CONSTRAINT [FK_AGGREGATION_CHILDS_AGGREGATIONS] FOREIGN KEY ([PARENT_CODE]) REFERENCES [AGGREGATIONS]([CODE]) ON DELETE CASCADE,
CONSTRAINT [FK_AGGREGATION_CHILDS_CODES] FOREIGN KEY ([CODE]) REFERENCES [CODES]([CODE])
)
Все записи в AGGREGATION_CHILDS
для одной и той же PARENT_CODE
будут иметь один и тот же CODE_LEVEL
.
Как я могу воспроизвести это заявление sql?
Я думаю, что это может быть яснее, как переписать, если вы измените 'ВЫБРАТЬ c.CODE_LEVEL ... GROUP BY c.CODE_LEVEL' в простой' SELECT DISTINCT c.CODE_LEVEL' без группировки. –
", и я пробовал это:" ... НО ...? Что именно вы спрашиваете? Что вы пытаетесь угадать? Что не работает? – HimBromBeere