Что не так с этой группой присоединиться - PullRequest
0 голосов
/ 29 апреля 2011

У меня есть класс Profile, у которого есть свойство отца, которое само ссылается на себя. Я хочу загрузить профиль вместе с его профилем отца в одном операторе соединения SQL

Select * FROM profile left join profile as father on profile.fatherid = father.id where profile.id = 650

Итак, я создал следующий linqоператор, но вместо запуска оператора sql об этом выполняются следующие операторы

select * from profiles

select * from profiles where id = 650

Затем в памяти он группирует их вместе, но, очевидно, я не хотел бы загружать всю базу данных.

    private class Result
    {
        public Profile Profile { get; set; }
        public IEnumerable<Profile> Fathers { get; set; }
    }
    private Result MapFather(Profile p, IEnumerable<Profile> father)
    {
        return new Result() {Profile = p, Fathers = father.DefaultIfEmpty()};
    }

   var profiles = from p in db.Profiles where p.ID.Equals(650) select p;
   var fathers = from f in db.Profiles select f;
   var groupJoin = profiles.GroupJoin(fathers,
                                        p => p.FatherID, 
                                        f => f.ID, 
                                        MapFather).ToList();

1 Ответ

0 голосов
/ 29 апреля 2011

Ваш вызов GroupJoin () получает версию IEnumerable, потому что ваш вызов MapFather является Func <,> вместо Expression>. Поэтому вызовы профилей и отцов выполняются до GroupJoin.

Попробуйте включить MapFather ():

var groupJoin = profiles.GroupJoin(fathers,
                                    p => p.FatherID, 
                                    f => f.ID, 
                                    (p, fathers) => new Result() {Profile = p, Fathers = father.DefaultIfEmpty()}).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...