У меня есть таблица, в которой есть своего рода child-> child-> parent. (Это исправление, которое я использую в существующей старой базе данных, поэтому оно немного хитро).
Класс для таблицы:
public class Foo
{
int ID {get;set;}
int ParentID {get;set;}
int BaseParentID {get;set;}
}
Допустим, у меня там есть несколько записей
ID: 10, ParentID: 5, BaseParentID: 5
ID: 05, ParentID: 1, BaseParentID: 5
ID: 01, ParentID: 1, BaseParentID: 0
Что я хочу сделать, так это получить каждый из ParentID до тех пор, пока baseparentid не станет равным 0. Так что, в некотором смысле, он перебирает таблицу из одной записи в другую и извлекает ее в список идентификаторов.
Конечным результатом должен быть список: { 10, 5, 1 }
Это то, что я делаю сейчас (на данный момент есть ограничение в 4, но я бы предпочел, чтобы не было предела):
var list = new List<int?>();
var id = 10; // The first ID is given when this method is started.
list.Add(id);
int? pid = db.Foo.Where(w => w.ID == id).Single().BaseParentID; // i have this as a compiled query function
if (pid != 0) {
list.Add(pid);
pid = db.Foo.Where(w => w.ID == pid).Single().BaseParentID; // for the sake of this example i'm just using the query here
if (pid != null) {
list.Add(pid);
// And so on
}
}
Как видите, это немного дурацкий способ сделать это. Но я не уверен, есть ли способ сделать это в необычном запросе linq.
пс. Дело в том, что это своего рода структура псевдопапок.