Не могу составить linq-запрос

232
09 февраля 2018, 17:42

Есть список объектов со следующей структурой(что-то вроде оповещений):

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.

READ ALSO
Конвертация универсального типа <T> в Nullable<T>?

Конвертация универсального типа <T> в Nullable<T>?

Как из метода GetValue() возвратить значение типа Nullable

207
Передача параметров в функцию BitConverter.ToUInt32

Передача параметров в функцию BitConverter.ToUInt32

Очень глупый, скорее всего, вопрос

227
C# - Обсуфикация в динамической компиляции

C# - Обсуфикация в динамической компиляции

Здравствуйте, собственно интересует каким образом можно зашифровать, обсуфицировать программу которая создается в динамической компиляции

193