VB.LINQ语句中的DataRow扩展方法

本文关键字:DataRow 扩展 方法 LINQ 语句 VB | 更新日期: 2023-09-27 18:15:44

我们目前在c#应用程序中使用了许多扩展方法来使用LINQ将泛型数据集转换为强类型对象。其主要目的是,如果存在某些类型转换问题或其他异常,扩展方法可以记录错误。

我们正在尝试将此代码转换为VB。. NET应用程序,但将扩展方法公开给DataRow对象的模块不起作用。它不能编译。代码片段2中的下面一行有一个编译错误,它没有看到GetFieldAsString。

.MajorPurchaseXID = row.GetFieldAsString("") _

这是在c#中工作的代码,第一个片段是位于我们的linq类中的扩展方法。第二个代码片段是这个扩展方法在我们的数据访问层方法中的使用。

public static class Linq
{
    public static string GetFieldAsString(this DataRow row, string field)
    {
        return row.Field<string>(field);
    }
}

第二段代码>>

List<OfferGroupInfo> offerGroupList = new List<OfferGroupInfo>();
offerGroupList = (from row in ds.Tables[0].AsEnumerable()
                               select new OfferGroupInfo
                               {
                                   XID = row.GetFieldAsInt("OfferGroupXID"),
                                   OfferGroupTypeXID = row.GetFieldAsInt("OfferGroupTypeXID"),
                                   OfferGroupType = row.GetFieldAsString("OfferGroupType"),
                                   Name = row.GetFieldAsString("OfferGroup"),
                                   Description = row.GetFieldAsString("OfferGroupDesc")
                               }).ToList();

现在,这是我们到vb.net的转换。第一个代码片段是将方法标记为扩展的模块。第二个代码片段是用法,同样是在我们的数据访问中。

我们已经尝试了一些东西,但不能让GetFieldAsString方法作为DataRow对象的扩展工作,因为它是在c#中。我们需要让这个工作,因为我们想调用row。>ExtensionMethodName>相对于(datarow, field等…)作为参数。想法吗?

Namespace ToolBox
    Module LinqExtensionMethods
      <Extension()>
      Public Function GetFieldAsString(row As DataRow, field as String) As String
        Try
            Return row.Field(Of String)(field)
        Catch ex As Exception
            LogHandler.WriteError("some error message here")
            Throw New HandledException
        End Try
      End Function
    End Module
End Namespace

第二段代码>>

Dim mppTicketTermList As New List(Of MPPTicketTerms)
mppTicketTermList = (From row In ds.Tables(0).AsEnumerable() _
                                 Select New MPPTicketTerms With _
                                 { _
                                     .MajorPurchaseXID = row.GetFieldAsString("") _
                                 }).ToList()

VB.LINQ语句中的DataRow扩展方法

找到我的问题,模块应该更改为公共模块,然后一切正常工作。哎呀,真痛苦!