Давайте представим, что у меня есть таблица с именем Foo с первичным ключом FooID и целочисленным неуникальным столбцом Bar.По какой-то причине в SQL-запросе мне приходится объединять таблицу Foo с самой собой несколько раз, например:
SELECT * FROM Foo f1 INNER JOIN Foo f2 ON f2.Bar = f1.Bar INNER JOIN Foo f3 ON f3.Bar = f1.Bar...
Я должен добиться этого через LINQ to Entities.
Выполнение
ObjectContext.Foos.Join(ObjectContext.Foos, a => a.Bar, b => b.Bar, (a, b) => new {a, b})
дает мне левое внешнее соединение в результирующем запросе, и мне нужны внутренние объединения, это очень важно.
КонечноЯ мог бы добиться успеха, если бы в edmx я добавил столько ассоциаций Foo с самим собой, сколько необходимо, а затем использовал их в своем коде, Entity Framework заменил бы правильное внутреннее соединение для каждой из ассоциаций.Проблема в том, что во время разработки я не знаю, сколько соединений мне понадобится.Хорошо, один из обходных путей - добавить столько из них, сколько разумно ...
Но, если ничего другого, с теоретической точки зрения, вообще возможно ли создавать внутренние объединения через EF без явного определения ассоциаций?
В LINQ to SQL был (несколько странный) способ сделать это через GroupJoin, например:
ObjectContext.Foos.GroupJoin(ObjectContext.Foos, a => a.Bar, b => b.Bar, (a, b) => new {a, b}).SelectMany(o = > o.b.DefaultIfEmpty(), (o, b) => new {o.a, b)
Я только что попробовал это вEF, уловка не работает там.Он все еще генерирует внешние соединения для меня.
Есть идеи?