У меня есть две таблицы:
- Сообщения - среди прочего, имеет to_id и from_id .
- Люди - имеет соответствующий person_id
Я пытаюсь выяснить, как сделать следующее в одном linq запросе:
Дайте мне все сообщения, которые были отправлены и от лица x ( idself ).
У меня была пара трещин в этом.
Не совсем верно
MsgPeople = (from p in db.people
join m in db.messages on p.person_id equals m.from_id
where (m.from_id == idself || m.to_id == idself)
orderby p.name descending
select p).Distinct();
Это почти работает, за исключением одного случая:
"люди, которые никогда не получали сообщение, просто отправили мне его"
Как это работает в моей голове
Так что мне действительно нужно что-то вроде:
join m in db.messages on (p.people_id equals m.from_id or p.people_id equals m.to_id)
Получает мне подмножество людей, которых я ищу
Кажется, ты не можешь этого сделать. Я пробовал несколько других вариантов, таких как
делает два соединения:
MsgPeople = (from p in db.people
join m in db.messages on p.person_id equals m.from_id
join m2 in db.messages on p.person_id equals m2.to_id
where (m2.from_id == idself || m.to_id == idself)
orderby p.name descending
select p).Distinct();
но это дает мне подмножество результатов, которые мне нужны, я думаю, что-то
делать с порядком, в котором разрешены объединения.
Мое понимание LINQ (и, возможно, даже теории баз данных) смущающе поверхностно, и я с нетерпением жду, чтобы пролить свет на мою проблему.