如何将 IEnumerable<AnonymousType> 转换为 List<T>?

How to convert an IEnumerable<AnonymousType> to a List<T>?

我已经使用 Linq 过滤了 List<Application> 以连接该列表中的两个字段和 return 结果,现在需要 return 该列表到调用方法。

Linq 过滤的结果是 IEnumerable<AnonymousType> 类型,所以我不能 return 我的方法 return 类型是 List<Application>.

我最初尝试的是使用 ToList 方法转换 IEnumerable,但这会引发编译器错误:

IEnumerable does not contain a definition for ToList()

问题:

如何将 IEnumerable 转换或强制转换为列表?

代码:

这是在列表上执行的任务,用于连接两个字段,return它作为一个列表:

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

下面是我如何尝试 return IEnumerable 作为列表:

                return filteredAppList.ToList<Application>();

问题是,之前查询 returns 一系列 anonymous 对象,我们正在尝试将它们转换为 Application 类型。是什么导致了这个问题,试试这个。

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

                          })
               .ToList();

如果你知道你需要 return 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();