如何将List<匿名类型>转换为List<string>

6
我想要将一个List<匿名类型>转换为List<字符串>。我有以下代码:
var lkpiTodisplay = _MGMTDashboardDB.KPIs.Where(m => m.Compulsory == true && m.Active == true)
                                         .Select(m => new
                                         {
                                             KPI_Name = m.Absolute == true ? m.KPI_Name : (m.KPI_Name + "%")
                                         }).ToList();

for(int i=1; i<= BusinessTargetCol; i++)
{
   lkpiTodisplay.Add(new
   {
      KPI_Name = "Business Target"
   });
}

这段代码创建了一个List<AnonymousType>。然后我想将这个List赋值给一个变量List<string>,如下所示:

DashboardViewModel lYTMDashboard = new DashboardViewModel()
{
      KPIList = (List<string>) lkpiTodisplay,
      //other assignments
};

铸造不起作用。我该如何转换变量?欢迎提供修改第一个代码片段的其他解决方案,只要将KPIList变量保持为List<string>即可。
谢谢
Francesco

2
永远不要使用“== true”,这是浪费。 - Ry-
看起来你一开始并不需要创建匿名类,所以可以不用创建。 - juharr
@minitech:有趣的论点。从性能角度来看是浪费吗? - CiccioMiami
这只是一个微小的改动(可能需要执行两个CPU操作,几纳秒而已),但它会让你的代码文件变得更大(有时也不太易读,因为这会导致出现滚动条)。 - Ry-
2个回答

15

如果你不需要匿名类,那么你可以跳过它。

 lkpiTodisplay.Add("Business Target");

或者

你可以做

lkpiTodisplay.Select( x => x.KPI_Name).ToList();

获取 List<String> 的方法


第二个解决方案就是我要找的。它非常简单,我甚至没有想到过!非常感谢。 - CiccioMiami

6

您不能将List<AnonymousType>赋值给List<String>,这些类型不兼容。
请使用lkpiToDiplay.Select(i => i.ToString()).ToList()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接