为什么我会得到a";公共成员';字段';关于类型';字符串';找不到。”;在VB.Net中将我的datatable行转换为(对象)列表时发生异常?

为什么我会得到a";公共成员';字段';关于类型';字符串';找不到。”;在VB.Net中将我的datatable行转换为(对象)列表时发生异常?,vb.net,linq,Vb.net,Linq,我有一个VB.Net应用程序,它试图使用Linq将数据表中的行转换为对象的通用列表 这是我的类(对象)定义: Public Class Sample Public Property Field1 As String = "" Public Property Field2 As String = "" End Class Dim dt as DataTable = ' Results of some query Dim samples As New List(Of Sample)

我有一个VB.Net应用程序,它试图使用Linq将数据表中的行转换为对象的通用列表

这是我的类(对象)定义:

Public Class Sample
    Public Property Field1 As String = ""
    Public Property Field2 As String = ""
End Class
Dim dt as DataTable = ' Results of some query
Dim samples As New List(Of Sample)

If dt.Rows.Count > 0 Then
   samples = (From dr In dt.AsEnumerable() _
             Select New Sample() _
                With {.Field1 = IIf(String.IsNullOrEmpty(dr.Field(Of String)(0)), "Missing Field1", dr.Field(Of String)(0)) _
                      .Field2 = IIf(String.IsNullOrEmpty(dr.Field(Of String)(1)), "Missing FIeld2", dr.Field(Of String)(1))} _
             ).ToList()
End If
下面是我用来转换为列表(T)的代码片段:

Public Class Sample
    Public Property Field1 As String = ""
    Public Property Field2 As String = ""
End Class
Dim dt as DataTable = ' Results of some query
Dim samples As New List(Of Sample)

If dt.Rows.Count > 0 Then
   samples = (From dr In dt.AsEnumerable() _
             Select New Sample() _
                With {.Field1 = IIf(String.IsNullOrEmpty(dr.Field(Of String)(0)), "Missing Field1", dr.Field(Of String)(0)) _
                      .Field2 = IIf(String.IsNullOrEmpty(dr.Field(Of String)(1)), "Missing FIeld2", dr.Field(Of String)(1))} _
             ).ToList()
End If
代码编译得很好,但出现以下异常:

“找不到类型‘String’上的公共成员‘Field2’。”

如果我只执行1个字段,则该语句工作正常。 如果我颠倒“With”子句中字段的顺序,则会出现以下异常:

找不到类型“String”上的公共成员“Field1”

我做错了什么? 我的Linq定义有问题吗


谢谢

当您将
一起使用时,类的属性应该用逗号分隔

试一下,如下图所示

Select New Sample With {.Field1 = ....., .Field2 =........}

该代码段在字段定义之间缺少逗号

With {.Field1 = IIf(String.IsNullOrEmpty(dr.Field(Of String)(0)), "Missing Field1", dr.Field(Of String)(0)) _
                      .Field2 = IIf(String.IsNullOrEmpty(dr.Field(Of String)(1)), "Missing FIeld2", dr.Field(Of String)(1))}
应该是:

With {.Field1 = IIf(String.IsNullOrEmpty(dr.Field(Of String)(0)), "Missing Field1", dr.Field(Of String)(0)), _
                      .Field2 = IIf(String.IsNullOrEmpty(dr.Field(Of String)(1)), "Missing FIeld2", dr.Field(Of String)(1))}