Есть список объектов со следующей структурой(что-то вроде оповещений):
public struct Friend
{
public int FromUserId;
public DateTime SendDate;
public int Status;
public int ToUserId;
}
Значение Status меняется от 0 до 3. FromUserId != ToUserId.
Я фиксирую номер какого-то юзера и хочу выбрать все объекты, удовлетворяющие условиям:
FromUserId или ToUserId объекта == номеру фиксированного мной юзера и поле Status == 2. Либо если есть пара объектов user1 и user2, где user1.FromUserId == user2.ToUserId и user1.ToUserId == user2.FromUserId(то есть симметричное оповещение) и какой-то из этих Id равен Id моего фиксированного пользователя, и поле status != 3, то эту пару тоже надо выбрать.
Никак не могу составить такой запрос, который бы удовлетворял моим условиям. Пока есть такое:
var tmpUserFriends =
from potentialFriend in this.friends
let someFriends = potentialFriend
where ((someFriends.ToUserId == userContext.User.UserId ||
someFriends.FromUserId == userContext.User.UserId) && someFriends.Status != 3)
join user in this.friends on potentialFriend.ToUserId equals user.FromUserId
where ((user.ToUserId == userContext.User.UserId ||
user.FromUserId == userContext.User.UserId) && user.Status != 3)
select user;
Где userContext.User - как раз мой фиксированный пользователь, а this.friends - это список всех объектов. Этот запрос выводит нужные мне объекты, но добавляет лишние - FromUserId или ToUserId объекта == номеру фиксированного мной юзера, но поле Status не 2, как в условии, а 0,1,2. Мне нужно только значение 2. В симметричном оповещении допускается 0,1,2.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости