LINQ: ссылка 1: таблица M и результаты слияния - PullRequest
0 голосов
/ 03 июля 2011

у меня

  1. table Users (с User.Id и например)

  2. table Visibility (User1Id и User2Id, оба являются внешними ключами таблицы Users)

  3. table Contact (User.Id с внешним ключом, связывающим 1: 1 контакт с пользователем).

Таблица видимости должна позволять пользователям просматривать других контактов пользователя, а также свои собственные. Для этого Пользователь1 может видеть контакты Пользователя2 (но не наоборот).

Теперь я пытаюсь сделать запрос вот так, но, очевидно, он не работает:

Contact.Where(c => c.UserId == userId || c.UserId IN c.User.Visibilities) - по сути, я пытаюсь вернуть 1. все записи Контактов, которые имеют предоставленный UserId (это просто и уже работает, конечно) и , чтобы вернуть все связанные Контакты, с другим пользователем, но указанный пользователь связан с этим другим пользователем через User1: User2 в таблице видимости.

Чтобы получить полный пример:

Users
=====
UserId     Name
10         John
15         Sasha
20         Marcus

Visibility
==========
User1Id    User2Id
10         20

Contact
=======
ContactId  UserId  Zip
1          10      23232
2          15      55555
3          20      92929

Что бы я хотел получить из запроса LINQ при запросе идентификатора пользователя 10, это контакты 1 и 3, основываясь на том факте, что пользователь 10 уже может видеть контакт 1, а также на Visibility Таблица также может видеть пользователя 20 контакт 3.

Result (when querying for user 10)
======
ContactId  UserId  Zip
1          10      23232
3          20      92929

Надеюсь, что имеет смысл?

1 Ответ

1 голос
/ 03 июля 2011
Contact.Where(c=>c.UserId == userId || c.User.Visibilities.Any(v=>v.User1Id == userId))
...