如何使用 Lambda 或 Linq 将匿名类型转换为原始类型成员

Posted

技术标签:

【中文标题】如何使用 Lambda 或 Linq 将匿名类型转换为原始类型成员【英文标题】:How to cast anonymous type to primitive type member using Lambda or Linq 【发布时间】:2012-01-04 09:53:23 【问题描述】:

您好,我正在尝试使用 Lambda 表达式将匿名类型列表转换为原始类型列表,到目前为止我没有运气。

我知道我可以使用 foreach 循环遍历“a”并获取值,但我想知道如何在 Lambda 或 Linq 中执行此操作。

var a = new [] new name= "jerry", age = 32, new name="peter",age=23;

List<string> b = a.Select(p => new System.Stringp.name).ToList();
List<int> c = a.Select(p => new System.Int32p.age).ToList();

【问题讨论】:

我认为我们总是需要将它转换为一个对象。谢谢大家的回答。 【参考方案1】:
        var a = new[]  new  name = "jerry", age = 32 , new  name = "peter", age = 23  ;

        List<string> b = a.Select(p => p.name).ToList();
        List<int> c = a.Select(p => p.age).ToList(); 

问题在于您在new System.Stringp.name 中使用了 和 。这不是实例化类型的有效方法。

【讨论】:

【参考方案2】:
var a = new[]  new  name = "jerry", age = 32 ,new name = "peter", age = 23;

List<string> b = a.Select(p => p.name).ToList();
List<int> c = a.Select(p => p.age).ToList();

【讨论】:

【参考方案3】:

你为什么尝试通过调用构造函数来实例化一个新实例?

这个:

var a = new [] new name= "jerry", age = 32, new name="peter",age=23; 

List<string> b = a.Select(p => p.name).ToList(); 
List<int> c = a.Select(p => p.age).ToList(); 

工作正常。 p.Age 是一个整数,因此是一个值类型。这意味着它是按值复制的,因此您确实会在列表 c 中获得唯一的副本。 p.name 是一个字符串。在 .NET 中,字符串是不可变的,因此共享字符串实例非常方便。

另请注意,这两种构造甚至都不存在! 另外需要注意的是,调用构造函数时,需要使用 () 而不是

【讨论】:

以上是关于如何使用 Lambda 或 Linq 将匿名类型转换为原始类型成员的主要内容,如果未能解决你的问题,请参考以下文章

linq-匿名方法,匿名委托,lambda演化

Lambda

linq如何进行增删改查操作

在linq查询中以匿名类型设置动态对象的所有属性

Lambda表达式

具有匿名类型的 C# LINQ 构建表达式