Entity Framework Core: фильтровать по 3 полямC#

Место общения программистов C#
Ответить
Anonymous
 Entity Framework Core: фильтровать по 3 полям

Сообщение Anonymous »

Я пытаюсь запросить некоторые подписки из базы данных с помощью Entity Framework Core. Подписка равна другой подписке, если идентификатор пользователя, тип уведомления и канал совпадают.
Я пытаюсь сделать это следующим образом:< /p>

Код: Выделить всё

// Create a list of anonymous objects that combine the three fields for comparison
var subscriptionKeys = subscriptions
.Select(s => new { s.UserId, s.NotificationType, s.Channel })
.ToList();

// Fetch all existing subscriptions where the combination of UserId,  NotificationType, and Channel match
var existingSubscriptions = await this.context.Subscriptions
.Where(s => subscriptionKeys.Contains(new { s.UserId, s.NotificationType, s.Channel })).ToListAsync();
Но я получаю следующее исключение:

System.InvalidOperationException HResult=0x80131509 Message=Выражение LINQ '__subscriptionKeys_0

.Contains(new {

UserId = StructuralTypeShaperExpression:

Micro.NotificationService.Models.Subscription

ValueBufferExpression:

ProjectionBindingExpression: EmptyProjectionMember

IsNullable: False

.UserId,

NotificationType = StructuralTypeShaperExpression:
Micro.NotificationService.Models.Subscription

ValueBufferExpression:

ProjectionBindingExpression: EmptyProjectionMember

IsNullable: False

.NotificationType,

Channel = StructuralTypeShaperExpression:

Micro.NotificationService.Models.Subscription

ValueBufferExpression:

ProjectionBindingExpression: EmptyProjectionMember

IsNullable: False

.Channel

})' не удалось перевести. Либо перепишите запрос в форме, которую можно перевести, либо явно переключитесь на оценку клиента, вставив вызов AsEnumerable, AsAsyncEnumerable, ToList или ToListAsync. Дополнительную информацию см. на https://go.microsoft.com/fwlink/?linkid=2101038.
Source=Microsoft.EntityFrameworkCore
StackTrace:

в Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.Translate(Выражение-выражение)

Как выполнить запрос такого типа? Кстати, перечисляемые подписки и подписки DbSet не являются объектами одного и того же типа. Одно из них — это сообщение, а другое — фактический объект, сохраненный в базе данных.
Могу ли я сделать что-то вроде сопоставления одного с другим и просто использовать «Содержит»?

Подробнее здесь: https://stackoverflow.com/questions/789 ... y-3-fields
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»