InvalidOperationException: выражение LINQ не может быть переведено - PullRequest
0 голосов
/ 07 мая 2020

Я использую sh, чтобы эффективно извлекать последние сценарии (сгруппированные по имени файла и группе, из которой они принадлежат) из таблицы в базе данных EF core 3.1 / npg sql. x.Group определяется как public virtual TranslationGroups Group { get; set; }, которая является другой таблицей.

foreach (var latestScript in await Db.TranslationScripts.GroupBy(x => new
    {
        x.Filename,
        x.Group
    })
    .Select(x => x.OrderByDescending(y => y.Time)
        .First(x => x.Group == bundle))
    .ToListAsync())
{
    ...
}

Результаты в

InvalidOperationException: The LINQ expression 'DbSet<TranslationScripts>
.LeftJoin(
outer: DbSet<TranslationGroups>,
inner: t => EF.Property<Nullable<int>>(t, "Groupid"),
outerKeySelector: t0 => EF.Property<Nullable<int>>(t0, "id"),
innerKeySelector: (o, i) => new TransparentIdentifier<TranslationScripts, TranslationGroups>(
Outer = o,
Inner = i
))
.GroupBy(
source: t => new {
Filename = t.Outer.Filename,
Group = t.Inner
},
keySelector: t => t.Outer)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.

Итак, как мне этого добиться? Ясно, что ему не нравится использовать другую ссылку на таблицу для group by, но я не знаю, как получить доступ к столбцу "groupid", который создается в postgresql, который соответствует этому.

edit: Кажется, group by просто не очень хорошо реализован, поэтому я переключился на необработанный запрос, что не самый лучший вариант, но его придется делать, если у кого-то нет решения.

...