Как я могу уплотнить следующий запрос Linq в один IQueryable

У меня есть модель EntityFramework, которая имеет Пользовательский объект, который имеет EntityCollection Организаций.

Для конкретного Пользователя я пытаюсь записать Запрос Linq для возврата названий организаций, что пользователь принадлежит, где тот запрос поразит дб только однажды.

Моя проблема состоит в том, что я не вижу, как записать, что этот запрос, не имея необходимость осуществлять пользователя сначала затем запрашивает пользовательский набор организации.

Я хотел бы попытаться записать один запрос, который поражает дб однажды.

Что я имею до сих пор:

var orgNames = context.Users
    .Where(u => u.LoweredUserName == userName.ToLower())
    //materialises user
    .FirstOrDefault()
    .Organisations
    //second hit to the db
    .Select(o => o.Name);

Что я был стремлением psuedo, но не видьте лес для деревьев:

orgNames = context.Users
    .Where(u => u.LoweredUserName == userName.ToLower())
    //don't materialise but leave as IQueryable
    .Take(1)
    //The problem: turn what the query sees as possibly multiple
    // (due to the Take method) EntityCollection<Organisation> into a List<String>
    .Select(u => u.Organisations.Select(o => o.Name));

Я посмотрел на агрегаты, но я, кажется, вхожу в круги :)

1
задан Simon Francesco 18 October 2010 в 22:51
поделиться