4

これがコンパイルされない理由を誰か教えてもらえますか? エラーは次のとおりです。

ソース タイプ のクエリ パターンの実装が見つかりませんでしたSystem.Data.DataTableWhere見つかりません。

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

namespace caLINQ
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Data Source=STEVEN-PC\\SQLEXPRESS;Initial Catalog=linqtest;Integrated Security=True;Pooling=False";
            using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString))
            {
                 connection.Open();
                 String cmdText = "select * from customers";
                 System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(cmdText, connection);
                 System.Data.SqlClient.SqlDataReader dr;
                 dr = cmd.ExecuteReader();
                 DataSet ds = new DataSet();
                 ds.Load(dr, LoadOption.OverwriteChanges, "tab1");
                 DataTable dt = ds.Tables[0];
                 var qy = from c in dt // error is here
                          where c.country == "Italy"
                          select c.name;
            }
            Console.ReadKey();
        }
    }
}
4

2 に答える 2

12

試す:

var qy = from c in dt.AsEnumerable()
         where c.Field<string>("country") == "Italy"
         select c.Field<string>("name");

AsEnumerable()IEnumerable<DataRow>LINQ で使用できるを返します。

于 2012-06-25T16:26:53.563 に答える
4

コードを次のように調整します (DB 列は「国」と「名前」であると想定しています):

var qy = from DataRow c in dt.Rows
         where c.Field<string>("country") == "Italy"
         select c.Field<string>("name");

または

var qy = (from DataRow c in dt.Rows
         where c.Field<string>("country") == "Italy"
         select c.Field<string>("name")).ToList()

それらの「名前」のリストについて。

于 2012-06-25T17:47:37.933 に答える