В EF 4.0+, LEFT JOIN синтаксис немного отличается и представляет сумасшедшую причуду:
var query = from c1 in db.Category
join c2 in db.Category on c1.CategoryID equals c2.ParentCategoryID
into ChildCategory
from cc in ChildCategory.DefaultIfEmpty()
select new CategoryObject
{
CategoryID = c1.CategoryID,
ChildName = cc.CategoryName
}
Если вы захватываете выполнение этого запроса в SQL Server Profiler, вы увидите, что он делает на самом деле выполните LEFT OUTER JOIN. ОДНАКО, если у вас есть несколько предложений LEFT JOIN («Group Join») в вашем запросе Linq-to-Entity, я обнаружил, что предложение self-join действительно может выполняться как в INNER JOIN - ДАЖЕ ЕСЛИ ВЫШЕ СИНТАКСИС ИСПОЛЬЗУЕТСЯ!
Разрешение на это? Как сумасшедший, и, по мнению MS, это звучит неправильно, я решил это, изменив порядок предложений соединения. Если предложение LEFT JOIN с саморегуляцией было первым объединением Linq Group, SQL Profiler сообщила о INNER JOIN. Если предложение LEFT JOIN для саморегуляции было LAST Linq Group Join, SQL Profiler сообщила о LEFT JOIN.
Это прекрасно. Я знаю это, но мне нужно в EF. В любом случае Спасибо ... – Waheed
@Waheed: Я не знаю, что вы имеете в виду - вы должны иметь возможность использовать этот точный запрос в EF. –
привет, я изменил его, чтобы вернуть список catergoyList, тогда он говорит, что вам нужно бросить. как передать var в список объект? –