【发布时间】:2023-04-11 05:19:01
【问题描述】:
我想从数据行中选择一些字段,例如:
var result = datatable.AsEnumerable()
.Select(x => new { x.Field<string>("Field1"), x.Field<string>("Field2")});
不幸的是,这行不通:
匿名类型成员声明器无效。必须使用成员分配、简单名称或成员访问来声明匿名类型成员。
我怎样才能实现我想要的?
编辑:似乎(至少)有两种方法可以实现它:
-
为他们命名:
var 结果 = datatable.AsEnumerable().Select(x => new { Field1 = x.Field("Field1"), Field2 = x.Field("Field2") }); 创建一个新对象
假设我们有一个类
class MyClass
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public MyClass(string field1, string field2)
{
this.Field1 = field1;
this.Field2 = field2;
}
}
我们可以做到以下几点:
var result = datatable.AsEnumerable()
.Select(x => new MyClass(x.Field<string>("Field1"), x.Field<string>("Field2")));
【问题讨论】:
-
有一个使用元组的答案,我更喜欢它,因为我需要将结果集转换为我自己的类。不幸的是,有人删除了答案...
-
为什么需要
Tuple来创建自己的类? -
我在我的回答中添加了一个元组示例,但是,如果你愿意,你应该在问题中明确说明。
-
.Net 3.5 中没有元组
-
我认为这可能是另一个问题,所以我没有添加它。 @Mario:我不需要一个元组来创建我的类,我只是将它替换为我的类,采用三个参数......
标签: c# linq .net-3.5 anonymous-types datarow