У меня есть класс 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();