"无法将lambda表达式转换为'string'类型,因为它不是委托类型"在C#中查询数据集

ror*_*.ap 4 .net c# linq vb.net lambda

我有这个代码,在VB.NET中编译很好:

Imports System
Imports System.Data
Imports System.Data.Entity
Imports System.Data.SqlClient
Imports System.Linq
Imports System.Collections
Imports System.Collections.Generic

Friend Module MainModule
    Friend Sub Main(args As String())
        Dim ds = GetSqlDataSet("", "")
        Dim allRows = From row In ds.Tables(0) Select row
    End Sub

    Private Function GetSqlDataSet(ByVal forQuery As String,
                                   ByVal withConnectionString As String,
                                   ByVal ParamArray withParameters As SqlClient.SqlParameter()) As DataSet

        GetSqlDataSet = New DataSet()

        Using conn As New System.Data.SqlClient.SqlConnection(withConnectionString)
            Using command As New System.Data.SqlClient.SqlCommand(forQuery, conn)
                command.Parameters.AddRange(withParameters)

                Using dataAdaptor As New System.Data.SqlClient.SqlDataAdapter(command)
                    dataAdaptor.Fill(GetSqlDataSet)
                End Using
            End Using
        End Using
    End Function
End Module
Run Code Online (Sandbox Code Playgroud)

以下是参考资料:

在此输入图像描述

现在我看起来像C#中的完全等价物:

using System;
using System.Data;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Collections;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    internal static class MainEntryPoint
    {
        internal static void Main(string[] args)
        {
            var ds = GetSqlServerDataSet("", "");
            var allRows = from row in ds.Tables[0] select row;
        }

        public static System.Data.DataSet GetSqlServerDataSet(string usingQuery, 
            string usingConnectionString, params System.Data.SqlClient.SqlParameter[] withParameters)

        {
            var ret = new System.Data.DataSet();

            using (var conn = new System.Data.SqlClient.SqlConnection(usingConnectionString))
            {
                using (var command = new System.Data.SqlClient.SqlCommand(usingQuery, conn))
                {
                    command.Parameters.AddRange(withParameters);

                    using (var adapter = new System.Data.SqlClient.SqlDataAdapter(command))
                    {
                        adapter.Fill(ret);
                    }
                }
            }

            return ret;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是参考资料:

在此输入图像描述

但是我收到了这个错误:

在此输入图像描述

我发现那说话众多资源将参考/使用报表System.LinqSystem.Data.Entity,但很明显,我有那些在这两种情况下.有人可以帮我解释一下吗?为什么它在VB.NET而不是C#中工作,如何让它在C#中工作?

Jon*_*eet 9

它看起来像VB内置支持DataTable.这是一个简短而完整的例子:

Option Strict On

Imports System
Imports System.Data
Imports System.Linq

Public Class LinqTest

    Shared Sub Main()
        Dim table as DataTable = New DataTable
        Dim allRows = From row In table Select row
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

如果你编译然后使用ildasm它,你会发现它正在DataTableExtensions.AsEnumerable()自动调用.我不想推测VB中指定的位置,但它不是 C#自动执行的操作的一部分.只需在C#代码中明确地执行此操作即可.

  • 很高兴知道即使是Skeetmaster也可以每天学到新东西;) (3认同)

归档时间:

查看次数:

678 次

最近记录:

10 年 前