gpt4 book ai didi

c# - List LINQ 投影到匿名或动态类型

转载 作者:太空狗 更新时间:2023-10-29 23:52:24 24 4
gpt4 key购买 nike

我正在尝试转换 List<Topic>通过 linq 投影转换为匿名或动态类型...我正在使用以下代码,但它似乎无法正常工作。它返回动态类型而没有错误,但是,如果我尝试枚举子字段( list<object/topic> )然后它说

Results View = The type '<>f__AnonymousType6<id,title,children>' exists in both 'MyWebCore.dll' and '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;
}

我所做的只是展平一个自包含对象的列表——基本上它是一个将被填充到 TreeView (jstree) 中的 POCO 列表。

主题类定义为:

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>
>}
}

最佳答案

为什么你有两次相同的 LINQ 代码?定义 _Flatten 函数后,您可以立即调用它 - var topics = _Flatten(Repository.Query<Topic>().ToList() .

看起来您正在创建两个相同的匿名类型,一个在 _Flatten 函数内部,一个在它外部。我认为编译器足够聪明来处理这个问题,但请尝试将您的调用更改为显式使用 _Flatten,看看它是否能解决问题。

关于c# - List<T> LINQ 投影到匿名或动态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9284490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com