Как отсортировать мой IQueryable иерархически в плоский список? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть какой-то плоский список, который я хочу отсортировать в псевдо-иерархическом порядке. Без материализации с использованием .ToList (), только IQueryable.

Я делаю следующее:

public class DictionaryElement
{
    [Key]
    public Guid ID { get; set; }

    [ForeignKey("ParentDictionaryElement")]
    public Guid? ParentDictionaryElementID { get; set; }
    public DictionaryElement ParentDictionaryElement { get; set; }
    public ICollection<DictionaryElement> DictionaryElements { get; set; }
    public String Value { get; set; }
}
 public IQueryable<DictionaryElement> Foo(DbContext db)
{
            IQueryable<DictionaryElement> allElementsQuery = db.DictionaryElements;
            //... allElementsQuery.OrderBy(); ?
            return allElementsQuery;
}

и данные:

+----+---------------------------+
| ID | ParentDictionaryElementID |
+----+---------------------------+
|  1 | null                      |
|  2 | null                      |
|  3 | 1                         |
|  4 | null                      |
|  6 | 3                         |
|  5 | 2                         |
+----+---------------------------+

Я хочу получить IQueryable , который будет получать такие данные:

+----+---------------------------+
| ID | ParentDictionaryElementID |
+----+---------------------------+
|  1 | null                      |
|  3 | 1                         |
|  6 | 3                         |
|  2 | null                      |
|  5 | 2                         |
|  4 | null                      |
+----+---------------------------+

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

ID 1
   ID 3 (parentID 1)
      ID 6 (parentID 3)
ID 2
   ID 5 (parentID 2)
ID 4

1 Ответ

0 голосов
/ 10 апреля 2019

попробуйте это?

return allElementsQuery.OrderBy(m => m).AsQueryable();
...