Я пытаюсь преобразовать List<Topic>
в анонимный или динамический тип с помощью проекции linq ... Я использую следующий код, но, похоже, он не работает должным образом. Он возвращает динамический тип без ошибок, однако, если я пытаюсь перечислить дочернее поле (list<object/topic>
), то он говорит:
Просмотр результатов = тип '<>f__AnonymousType6<id,title,children>'
существует как в «MyWebCore.dll», так и в «MvcExtensions.dll»
Странно.
Вот код, который я использую:
protected dynamic FlattenTopics()
{
Func<List<Topic>, object> _Flatten = null; // satisfy recursion re-use
_Flatten = (topList) =>
{
if (topList == null) return null;
var projection = from tops in topList
select new
{
id = tops.Id,
title = tops.Name,
children = _Flatten(childs.Children.ToList<Topic>())
};
dynamic transformed = projection;
return transformed;
};
var topics = from tops in Repository.Query<Topic>().ToList()
select new
{
id = tops.Id,
title = tops.Name,
children = _Flatten(tops.Children.ToList<Topic>())
};
return topics;
}
Все, что я делаю, это сглаживаю список самодостаточных объектов - в основном это список POCO, которые будут вставлены в древовидное представление (jstree).
Класс Topic определяется как:
public class Topic
{
public Guid Id {get;set;}
public string Name {get;set;}
public List<Topic> Children {get;set;}
}
А вот пример того, как выглядит первый член возвращаемого динамического объекта:
[0] = {
id = {566697be-b336-42bc-9549-9feb0022f348},
title = "AUTO",
children = {System.Linq.Enumerable.SelectManyIterator
<MyWeb.Models.Topic,
MyWeb.Models.Topic,
<>f__AnonymousType6<System.Guid,string,object>
>}
}