Как запросить таблицу соединений в EF Code First? - PullRequest
1 голос
/ 29 февраля 2012

У меня есть много-много отношений между таблицами A и B.

Поскольку я сначала использовал код, таблица БД 'AB' была создана автоматически. У меня нет модели сущности для него.

Как я могу, например, запросить все B, которые принадлежат A.id=x?

Edit:

После загрузки A или B я легко могу получить ссылки на списки B и A. соответственно.

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

Вот что я хочу сделать:

query.Where(**b.ID NOT IN (SELECT B.ID FROM AB WHERE A=5)** )

Я уверен, что мог бы сделать это с необработанным SQL-запросом, но я хочу быть последовательным и использовать IQueryable / LINQ, где могу.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Вы можете попробовать это:

var bsNotAssociatedWithA5 = context.Bs
    .Where(b => !b.As.Any(a => a.Id == 5))
    .ToList();

Создает следующий SQL:

SELECT 
[Extent1].[BId] AS [BId], 
[Extent1].[BColumn1] AS [BColumn1], 
// more columns
FROM [dbo].[Bs] AS [Extent1]
WHERE NOT EXISTS
    (SELECT 1 AS [C1]
     FROM [dbo].[ABs] AS [Extent2]
     WHERE ([Extent1].[BId] = [Extent2].[BId]) AND (5 = [Extent2].[AId]))

Редактировать

При использовании DbContext(EF> = 4.1) вы можете проверить SQL, используя ToString() из IQueryable:

var bsNotAssociatedWithA5Query = context.Bs
    .Where(b => !b.As.Any(a => a.Id == 5));

string sql = bsNotAssociatedWithA5Query.ToString();

var bsNotAssociatedWithA5 = bsNotAssociatedWithA5Query.ToList();
1 голос
/ 29 февраля 2012

A.Bs

Если у вас есть экземпляр A, у вас должно быть свойство в классе A для извлечения всех B из A.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...