2

データテーブルでLinqを介してレコードをフィルタリングしようとしていますが、どういうわけか、結果はエラーのないテーブルを表示していますが、テーブルの列に「行にエラーがあります」という行が表示されています。私のコードは次のとおりです:何か提案はありますか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;


namespace linq_app
{
    public partial class admins : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbcon"].ToString());

            con.Open();

            SqlCommand sqlcmd = new SqlCommand();
            sqlcmd.CommandText = "select * from user_info";
            sqlcmd.CommandType = CommandType.Text;

            sqlcmd.Connection = con;
            SqlDataReader sqlreader = sqlcmd.ExecuteReader();

            DataTable dt = new DataTable();
            dt.Columns.Add("first_name", typeof(string));
            dt.Columns.Add("last_name", typeof(string));
            dt.Columns.Add("Email_ID", typeof(string));
            dt.Columns.Add("Contact", typeof(string));
            dt.Columns.Add("Address", typeof(string));
            dt.Columns.Add("Role", typeof(string));


            while (sqlreader.Read())
            {
                DataRow dr = dt.NewRow();
                dr["first_name"] = sqlreader["first_name"];
                dr["last_name"] = sqlreader["last_name"];
                dr["Email_ID"] = sqlreader["email"];
                dr["Contact"] = sqlreader["contact1"];
                dr["Address"] = sqlreader["address"];
                dr["Role"] = sqlreader["role"];
                dt.Rows.Add(dr);
            }


            var results = from myRow in dt.AsEnumerable()
                          where myRow.Field<string>("Role").ToString() == "admin".ToString()
                          select myRow;

            //dataGridView1.DataSource = dt;


            //DataClasses1DataContext dc = new DataClasses1DataContext();
            //var admin = from records in dc.GetTable<user_info>() 
            //              where records.role =="admin"
            //              select records;
            GridView1.DataSource = results;
            GridView1.DataBind();
        }
    }
}
4

1 に答える 1

3

ToString通話を削除してみてください。nullロール列にある場合は例外をスローします。そして、フィルタリングされた行から新しいデータテーブルを作成します。

var results = from myRow in dt.AsEnumerable()
              where myRow.Field<string>("Role") == "admin"
              select myRow;

GridView1.DataSource = results.CopyToDataTable(); // create datatable
GridView1.DataBind();

ところで、代わりにLinq to Entitiesを使用しないのはなぜですか?データベース側でフィルタリングを行うことができます。

于 2013-03-07T12:46:26.437 に答える