#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 нет оценки, возможно, вы имели в виду оценку. Я сейчас это тестирую. Еще раз спасибо.