Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# datarow对象的匿名类型无效_C#_Linq_.net 3.5_Anonymous Types_Datarow - Fatal编程技术网

C# datarow对象的匿名类型无效

C# datarow对象的匿名类型无效,c#,linq,.net-3.5,anonymous-types,datarow,C#,Linq,.net 3.5,Anonymous Types,Datarow,我想从数据行中选择一些字段,例如: var result = datatable.AsEnumerable() .Select(x => new { x.Field<string>("Field1"), x.Field<string>("Field2")}); 我们可以做到以下几点: var result = datatable.AsEnumerable() .Select(x => new MyClass(x.Field<string

我想从数据行中选择一些字段,例如:

var result = datatable.AsEnumerable()
    .Select(x => new { x.Field<string>("Field1"), x.Field<string>("Field2")});
我们可以做到以下几点:

var result = datatable.AsEnumerable()
    .Select(x => new MyClass(x.Field<string>("Field1"), x.Field<string>("Field2")));

您需要输入属性的名称:

var result = datatable.AsEnumerable()
    .Select(x => new 
    { 
        Field1 = x.Field<string>("Field1"), 
        Field2 = x.Field<string>("Field2")
    });
编译器不知道如何从x.field1之类的东西推断名称。但这是可行的:

int id = 1;
string name = "Myname";
var obj = new { id, name }; // Names are inferred from the variable name.

var result = obj.name; // This would work

您需要输入属性的名称:

var result = datatable.AsEnumerable()
    .Select(x => new 
    { 
        Field1 = x.Field<string>("Field1"), 
        Field2 = x.Field<string>("Field2")
    });
编译器不知道如何从x.field1之类的东西推断名称。但这是可行的:

int id = 1;
string name = "Myname";
var obj = new { id, name }; // Names are inferred from the variable name.

var result = obj.name; // This would work

好吧,错误说明了一切,给成员起名字:

var result = datatable.AsEnumerable()
.Select(x => new { 
                    First = x.Field<string>("Field1"),
                    Second = x.Field<string>("Field2")
                 });

好吧,错误说明了一切,给成员起名字:

var result = datatable.AsEnumerable()
.Select(x => new { 
                    First = x.Field<string>("Field1"),
                    Second = x.Field<string>("Field2")
                 });

您需要为匿名类型的成员提供一些名称

var result = datatable.AsEnumerable()
    .Select(x => new { 
        Field1 = x.Field<string>("Field1"), 
        Field2 = x.Field<string>("Field2")});
然后您可以分别使用Item1和Item2访问成员

但是,该类是.NET4.0的新类,您的问题标记为3.5

作为对您的评论的回应,您可以声明自己的类型

public class MyPair<TItem1, TItem2>
{
    public MyPair(TItem1 item1, TItem2 item2)
    {
        this.Item1 = item1;
        this.Item2 = item2;
    }

    public TItem1 Item1 { get; private set; }
    public TItem2 Item2 { get; private set; }
}
很明显你会这样用

var result = datatable.AsEnumerable()
    .Select(x => new MyPair( 
        Field1 = x.Field<string>("Field1"), 
        Field2 = x.Field<string>("Field2")));

您需要为匿名类型的成员提供一些名称

var result = datatable.AsEnumerable()
    .Select(x => new { 
        Field1 = x.Field<string>("Field1"), 
        Field2 = x.Field<string>("Field2")});
然后您可以分别使用Item1和Item2访问成员

但是,该类是.NET4.0的新类,您的问题标记为3.5

作为对您的评论的回应,您可以声明自己的类型

public class MyPair<TItem1, TItem2>
{
    public MyPair(TItem1 item1, TItem2 item2)
    {
        this.Item1 = item1;
        this.Item2 = item2;
    }

    public TItem1 Item1 { get; private set; }
    public TItem2 Item2 { get; private set; }
}
很明显你会这样用

var result = datatable.AsEnumerable()
    .Select(x => new MyPair( 
        Field1 = x.Field<string>("Field1"), 
        Field2 = x.Field<string>("Field2")));

您必须使用反射,并且您将使用什么名称来定位属性…:@gdoron,是的,这些名字很重要。没有元组,只有一个替换,以同样的方式工作,不需要命名任何匿名类型,比如。选择x=>new MyObjectx.FieldFieldField_1,x.FieldFieldField_2您必须使用反射,并且您必须使用什么名称来定位属性…:@gdoron,是的,这些名字很重要。没有元组,只有一个替换,以同样的方式工作,不需要命名任何匿名类型,比如。Selectx=>newmyobjectx.fieldfieldfield_1,x.FieldField_2有一个使用元组的答案,我更喜欢元组,因为我需要将结果集转换为我自己的类。不幸的是,有人删除了答案…为什么您需要一个元组来创建自己的类?我已经在我的答案中添加了一个元组示例,但是,如果您希望,您应该在问题中明确说明。在.Net 3.5I中没有元组,我认为这可能是另一个问题,这就是为什么我没有添加它的原因@马里奥:我不需要一个元组来创建我的类,我只是用带三个参数的类来替换它……有一个答案是使用元组,我更喜欢元组,因为我需要将结果集转换为我自己的类。不幸的是,有人删除了答案…为什么您需要一个元组来创建自己的类?我已经在我的答案中添加了一个元组示例,但是,如果您希望,您应该在问题中明确说明。在.Net 3.5I中没有元组,我认为这可能是另一个问题,这就是为什么我没有添加它的原因@马里奥:我不需要一个元组来创建我的类,我只是用我的类替换了它,它包含三个参数。。。