LINQ MVC ViewModel: Multiple joins to the same table with optional field

Viewed 2184

Given the following database structure

Category

ID CategoryNameResID ParentCategory(Optional)

Resources

ID Text Lang

And given a ViewModel

public class CategoryViewModel
{
    public int ID { get; set; }
    public int CategoryNameResID { get; set; }
    public string CategoryName { get; set; }

    public int ParentCategory { get; set; }
    public string ParentCategoryName { get; set; }
}

I want to get the list of all Categories with ParentCategoryName included

What I did so far is:

var categories = (from cat in db.Categories
                  join res in db.Resources on cat.CategoryNameResID equal res.ID
                  select new CategoryViewModel{
ID = cat.ID,
CategoryNameResID = cat.CategoryNameResID,
CategoryName = res.Text,
ParentCategory = cat.ParentCategory,
ParentCategoryName = (from p in db.Resources
where p.ID == cat.ParentCategory
select p.Text)
}).ToList();

I can't figure out how to get the ParentCategoryName without having to iterate again, which is definitely wrong.

2 Answers
Related