Проверка возможных нулей запроса Linq

#linq #linq-to-sql

#linq #linq-to-sql

Вопрос:

У меня есть для простоты 2 таблицы:

 Table1 has UserId Email
Table2 has UserId Score
  

Я хочу отфильтровать все оценки > 10. Но в таблице 2 не гарантируется наличие пользователей. Идентификатор пользователя — это PK и FK в Table2. Идентификатор пользователя — это PK в таблице 1.

Моя проблема в том, что мне нужно получить все оценки, где они существуют, а затем проверить их.

Комментарии:

1. Неясно, что вы пытаетесь сделать, что вы пробовали или какие проблемы у вас возникли.

2. Что сказал Скит; Мои дикие догадки — это всего лишь дикие догадки. Моя главная проблема заключается в том, что структура вашей таблицы шаткая.

Ответ №1:

Смотрите Левое внешнее соединение

 var q =

    from user in Table1 

    join s in Table2 on user.UserId  equals score.UserId  into lscore

    from score in lscore.DefaultIfEmpty()

    where score == null || lscore.score < 10

    select new { userId = user.userid,  email = user.Email, Score = score == null ? 0 : lscore.score };
  

Комментарии:

1. Спасибо. Я думал, мне нужно левое внешнее соединение. Но я не знал, как выполнить часть проверки значения.

2. На самом деле этот запрос не работает. в lscore нет оценки, возможно, вы имели в виду оценку. Я сейчас это тестирую. Еще раз спасибо.