Linq-запрос для выбора вложенных детей - PullRequest
0 голосов
/ 28 октября 2018

У меня многоуровневая структура классов.То есть «тема» может иметь много детей, а «тема» может принадлежать нескольким родителям.Вот моя структура класса:

public abstract class Hierarchy <T>{
 public virtual ICollection<T> Parents { get; set; }
 public virtual ICollection<T> Children{ get; set; }
}

public class Topic: Hierarchy <T>
{
  public long ID {get;set;}
  public string Title{get;set;}
}

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

Это мойзапрос:

var result = from x in db.topics
             select new TopicsDO{
             Id = x.Id,
             Title = x.Title,
             ChildIds = x.Children.SelectMany(x=>x.Id) //This does not give nested child Ids, it just returns the immediate child Ids.
             }   

Спасибо за помощь.

1 Ответ

0 голосов
/ 28 октября 2018

Используете ли вы EntityFramework?затем вы можете использовать функции более высокого уровня, предоставляемые DbContext, для достижения того, чего вы пытаетесь достичь, например:

using (var context = new TopicContext())
{
  var topicsDO = context.Topics
    .Include(t=> t.Childrens)
    .Select(a => new
    {
        Id = a.BlogId,
        Title= a.Url,
        ChildrenIds = a.Children.Select(x => x.Id).ToArray()
    })
    .ToList();
}

, если вы решили использовать sql, вы можете использовать присоединяющуюся таблицу Children для достижения того, что вы делаете.

var result = from x in db.topics
            Join y in db.childrens On x.Id equals y.topicId Into childrenGroup
         select new TopicsDO{
         Id = x.Id,
         Title = x.Title,
         ChildrenGrp = childrenGroup
         } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...