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

时间:2014-07-31 13:16:58

标签: c# asp.net .net vb.net linq

我们目前在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);
    }
}

第二个片段&gt;&gt;

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#中。我们需要将其设置为我们想要调用行。&gt; ExtensionMethodName&gt;与(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

第二个片段&gt;&gt;

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

1 个答案:

答案 0 :(得分:1)

发现我的问题,应该将模块更改为公共模块,然后一切正常。糟糕,多么痛苦!