В блоге Роба Конери есть способ сделать это с помощью вспомогательного класса, который у него есть, LazyList<T>
. Также он использует пользовательские объекты, чтобы избежать проблемы анонимного типа соединения.
Я успешно использовал это, чтобы получить родительские дочерние отношения из sql без DataLoadOptions.
Я думаю, что он освещает это либо в Pt2, либо в Pt3 своих видео с MVC Storefront:
http://www.asp.net/learn/mvc-videos/video-351.aspx
http://www.asp.net/learn/mvc-videos/video-352.aspx
Предполагается, что у вас есть POCO с именем Category (не сущность linq) и класс LazyList:
var categories = (from c in _db.Categories
select new Category
{
CategoryID = c.CategoryID,
CategoryName = c.CategoryName,
ParentCategoryID = c.ParentCategoryID,
SubCategories = new LazyList<Category>(
from sc in _db.Categories
where sc.ParentCategoryID == c.CategoryID
select new Category
{
CategoryID = sc.CategoryID,
CategoryName = sc.CategoryName,
ParentCategoryID = sc.ParentCategoryID
})
});