【发布时间】:2016-06-14 10:17:31
【问题描述】:
我使用 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 作为列表返回:
return filteredAppList.ToList<Application>();
【问题讨论】:
-
你为什么要转换回Application类?
-
您的所有对象都是
Application对象。它们是匿名类型的实例。做你想做的事基本上涉及做.Select(x => new Application { RID = x.RID, ...})等——手动或自动;如果你想要Application实例,为什么要切换到匿名类型? -
RID_APP_FIELD是Application中的属性吗?如果不是,您要么必须将其设为 1,要么以这种方式覆盖ToString:return RID + " " + BusinessFriendlyName。然后你不需要创建新实例但你可以返回applicationList.Where(conditions).ToList() -
RID_APP_FIELD是通过连接 RID 和 BusinessFriendlyName 创建的匿名类型。 @TimSchmelter -
@BrianJ:不,具体类中不能有匿名属性。要么添加一个属性,如:
public string RID_APP_FIELD { get { return RID + " " + BusinessFriendlyName; } },要么以这种方式覆盖ToString。
标签: c# linq list ienumerable anonymous-types