如何将IEnumerable <anonymoustype>转换为List <t>?

时间:2016-06-14 10:17:32

标签: c# linq list ienumerable anonymous-types

我使用Linq过滤了List<Application>以连接该列表中的两个字段并返回结果,现在需要将该列表返回给调用方法。

Linq过滤的结果是IEnumerable<AnonymousType>类型,所以我无法返回,因为我的方法返回类型是List<Application>

我首先尝试的是使用ToList方法转换IEnumerable但是会抛出编译器错误:

IEnumerable does not contain a definition for ToList()

问题:

如何将IEnumerable转换或转换为List?

代码:

这是在List上执行的赋值,用于连接两个字段并将其作为列表返回:

                var filteredAppList = applicationList.Select(c => new { c.RID, RID_APP_FIELD = c.RID + " " + c.BusinessFriendlyName });

以下是我尝试将IEnumerable作为List返回的方法:

                return filteredAppList.ToList<Application>();

2 个答案:

答案 0 :(得分:4)

问题是,上一个查询返回一系列匿名对象,我们正在尝试将这些对象转换为Application类型。导致问题的原因是,试试这个。

filteredAppList.Select(x=> new Application() 
                          {
                              // set properties.

                          })
               .ToList();

答案 1 :(得分:1)

如果您知道需要返回Application个对象,则应该避免使用匿名类型:

var filteredAppList = applicationList.Select(c => new Application { RID = c.RID, RID_APP_FIELD = c.RID + " " + c.BusinessFriendlyName });

return filteredAppList.ToList();

我认为您的匿名类型与您的Application类型完全相同,但情况可能并非如此。您仍然可以在中间步骤中使用匿名类型,但运行时很难自动将您的匿名类型转换为Application,因此投射回所需类型的实例几乎是您唯一的选择。

var filteredAppList = applicationList.Select(c => new { RID = c.RID, RID_APP_FIELD = c.RID + " " + c.BusinessFriendlyName });

return filteredAppList.Select(anon => new Application { RID = anon.RID, OtherApplicationProperty = anon.RID_APP_FIELD }).ToList();