Как вернуть только те строки, где нет строк из другой таблицы, используя лямбда-выражения в C# - PullRequest
1 голос
/ 05 февраля 2020

У меня есть две таблицы; Уведомление и SeenBy .

Уведомление:

Notification.Id
Notification.Timestamp
Notification.Message

SeenBy

SeenBy.Id
SeenBy.NotificationId
SeenBy.ClientId
SeenBy.Timestamp

Мне нужно получить строки из table Уведомление , которое раньше не видели (Count = 0) с использованием вторичной таблицы SeenBy .

Каким будет запрос Linq или лямбда-выражения?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Вы можете попробовать что-то вроде этого:

var seenNotificationIds = seenByCollection.Select(x => x.NotificationId).Distinct();
var seenNotifications = notifications.Where(x => seenNotificationIds.Contains(x.Id));
var notSeenNotifications = notifications.Except(seenNotifications);
notSeenNotifications.Dump();
0 голосов
/ 05 февраля 2020

Вы можете использовать этот код:

var allNotificationObjects = ...; // all your notification objects
var seenByObjects = ...; // all seen by objects

var seenNotificationIds = seenByObjects
                         .Select(item => item.NotificationId)
                         .Distinct()
                         .ToHashSet();   

var result = allNotificationObjects
            .Where(item => !seenNotificationsIds.Contains(item.Id))
            .ToList(); // all notifications which are not seen
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...