Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,913

HOME > .NET Framework > Forum > สอบถามคำสั่ง LINQ to Oracle โดยใช้ Entity Framework จะต้องใช้งาน return เป็น datatable ตาม code ด้านใน








 

สอบถามคำสั่ง LINQ to Oracle โดยใช้ Entity Framework จะต้องใช้งาน return เป็น datatable ตาม code ด้านใน

 
Topic : 134460



โพสกระทู้ ( 59 )
บทความ ( 0 )



สถานะออฟไลน์



ผมได้ศึกษาจากลิงค์นี้แล้ว
https://www.thaicreate.com/tutorial/entity-framework-select.html

ผมต้องการ quey ข้อมูล LINQ to Oracle
แต่ติดปัญหา Error


Code (C#)
public class CustomerInfo
        {
            public string CusID { get; set; }
            public string CusName { get; set; }
            public string CountryName { get; set; }
        }


Code (C#)
private void Form1_Load(object sender, EventArgs e)
{
classDB cls = new classDB();
DataTable dt = new DataTable();
using (var db = new Entities())
            {
                List<CustomerInfo> ls;

                // Get data from CUSTOMER and join COUNTRY
                ls =  (from c in db.CUSTOMER
                  join d in db.COUNTRY on c.COUNTRY_CODE equals d.COUNTRY_CODE
                      select new CustomerInfo
                      {
                      CusID = c.CUSTOMER_ID,
                      CusName = c.NAME,
                      CountryName = d.COUNTRY_NAME
                      }).ToList();
                 -----------------------------------------------------------------
                dt = cls.ToDataTable(db, query);  <=== Error  บรรทัดนี้
                 -----------------------------------------------------------------
                // if found item rows
                //if (ls.Count() > 0)
                //{
                    //this.dataGridView1.DataSource = ls;
                //}
            }
}


Code (C#)
//class
public classDB()
{
public DataTable ToDataTable(DataContext ctx, object query) 
        {
            if (query == null)
            {
                throw new ArgumentNullException("query");
            }

            IDbCommand cmd = ctx.GetCommand(query as IQueryable);
            OracleDataAdapter adapter = new OracleDataAdapter();
            adapter.SelectCommand = (OracleCommand)cmd;
            DataTable dt = new DataTable("sd");

            try
            {
                cmd.Connection.Open();
                adapter.FillSchema(dt, SchemaType.Source);
                adapter.Fill(dt);
            }
            finally
            {
                cmd.Connection.Close();
            }
            return dt;
        }
}


ผมดัดแปลงโค้ดจาก LINQ to SQL มาปรับเป็น LINQ to Oracle เพราะผมใช้ฐานข้อมูล Oracle
ขอรบกวนผู้รู้ต่างๆ ช่วยแนะนำเว็บที่ผมจะศึกษา หรือช่วยดูโค้ดให้ที ว่าผมทำถูกต้องมั้ย



Tag : .NET, Win (Windows App), C#




ประวัติการแก้ไข
2019-11-05 23:57:02
2019-11-05 23:57:46
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-11-05 23:55:48 By : Takashi_7 View : 93 Reply : 5
 

 

No. 1



โพสกระทู้ ( 219 )
บทความ ( 5 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


ยังไม่ได้มีโอกาศทดลองเหมือนกัน ลองอ่านดูในกระทู้เก่าๆดูครับ
- https://www.thaicreate.com/tutorial/entity-framework-select-sql-query.html
- https://www.thaicreate.com/tutorial/entity-framework-oracle.html
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-06 00:42:11 By : ccjpn
 


 

No. 2



โพสกระทู้ ( 164 )
บทความ ( 0 )



สถานะออฟไลน์


บันทัดที่ 19 ตัวแปร query มายังไงครับ

และตัวแปร ls ได้ค่ามาแล้วนีี่ครับ


ประวัติการแก้ไข
2019-11-06 10:11:10
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-06 10:08:29 By : birdbird27
 


 

No. 3



โพสกระทู้ ( 74,017 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ใช้ LINQ แล้วลืม DataSet, DataTable ไปเลยครับ ใช้พวก List<T> แทนครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-06 10:10:56 By : mr.win
 


 

No. 4



โพสกระทู้ ( 59 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 2 เขียนโดย : birdbird27 เมื่อวันที่ 2019-11-06 10:08:29
รายละเอียดของการตอบ ::
ผมจะคิวรี่แล้ว เก็บข้อมูลมาพักไว้ที่ Datatable เพื่อจะใช้ข้อมูลนั้นอีกที

Code (C#)
public DataTable ToDataTable(Entities ctx, object query) 
        {
            if (query == null)
            {
                throw new ArgumentNullException("query");
            }

            IDbCommand cmd = ctx.GetCommand(query as IQueryable);   ==> Error ตรงนี้
            OracleDataAdapter adapter = new OracleDataAdapter();
            adapter.SelectCommand = (OracleCommand)cmd;
            DataTable dt = new DataTable("sd");

            try
            {
                cmd.Connection.Open();
                adapter.FillSchema(dt, SchemaType.Source);
                adapter.Fill(dt);
            }
            finally
            {
                cmd.Connection.Close();
            }
            return dt;
        }


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-09 11:07:05 By : Takashi_7
 


 

No. 5



โพสกระทู้ ( 59 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : mr.win เมื่อวันที่ 2019-11-06 10:10:56
รายละเอียดของการตอบ ::
ที่อยากทำคือ query ข้อมูล ls มาเก็บไว้ในตัวแปร dt

จากนั้นนำข้อมูล ใน dt มากรองอีกที่ แต่ติดที่เงื่อนไขวันที่ ที่เวลามาเกี่ยวด้วย
Code (C#)
.Where(row => Convert.ToDateTime(row["PAY_DATE"]) == Convert.ToDateTime("01/12/2561 13:01:19"))  ==>ใช้ได้


แต่ที่อยากได้ เฉพาะวันที่อย่างเดียว ไม่เอาเวลา
Code (C#)
.Where(row => DateTime.ParseExact(row["PAY_DATE"].ToString(),"dd/MM/YYYY", CultureInfo.InvariantCulture) == new DateTime(2018, 10, 1))    == > ไม่ได้  Error





CODE ทั้งหมด รันได้ปกติ
Code (C#)
private IEnumerable<DataRow> query_step2;
private void data()
        {
            using (var db = new Entities())
            {
                List<CustomerInfo> ls;             
                ls = (from c in db.CUSTOMER
                      select new CustomerInfo
                      {                        
                          CusID = c.CUSTOMER_ID,
                          Name = c.NAME,
                          BUDGET = c.BUDGET,
                          PAY_DATE = c.PAY_DATE,
                          Age = c.AGE.Value
                      }).ToList();                
                                  
                //เก็บข้อมูลพักไว้ dt
                DataTable dt = ToDataTable<CustomerInfo>(ls);              
                System.Console.WriteLine("ls=" + ls.Count() + " dt=" + dt);
                

                //นำข้อมูล ใน dt มากรองวันที่อีกที   
                var date1 = Convert.ToDateTime("01/12/2561 00:00:00");
                List<CustomerInfo> Sheet1 = dt.AsEnumerable()
                //----------------------ERROR----------------------
                             //.Where(row => Convert.ToDouble(row["BUDGET"]) == Convert.ToDouble(3000000))
                             //.Where(row => Convert.ToDateTime(row["PAY_DATE"]) == Convert.ToDateTime("01/12/2561 13:01:19"))
                             //.Where(row => DateTime.ParseExact(row["PAY_DATE"].ToString(),"dd/MM/YYYY", CultureInfo.InvariantCulture) == new DateTime(2018, 10, 1))           
                             //.Where(row => Convert.ToString(row["CusID"]) == Convert.ToString("C003"))  //string
                //----------------------ERROR----------------------
							 .Select(c => new CustomerInfo
                             {                                                              
                                 CusID = Convert.ToString(c["CusID"]),
                                 Name = Convert.ToString(c["Name"]),
                                 BUDGET = Convert.ToDecimal(c["BUDGET"]),
                                 PAY_DATE = Convert.ToDateTime(c["PAY_DATE"]),
                                 Age = Convert.ToInt32(c["Age"])
                             }).ToList();

               
          DataTable dt_step1 = new DataTable();
          DataColumn CusID = new DataColumn("CusID");
          CusID.DataType = System.Type.GetType("System.String");
          dt_step1.Columns.Add(CusID); //0

          DataColumn Name = new DataColumn("Name");
          Name.DataType = System.Type.GetType("System.String");
          dt_step1.Columns.Add(Name); //1

          DataColumn BUDGET = new DataColumn("BUDGET");
          BUDGET.DataType = System.Type.GetType("System.Double");
          dt_step1.Columns.Add(BUDGET); //3

          DataColumn PAY_DATE = new DataColumn("PAY_DATE");
          PAY_DATE.DataType = System.Type.GetType("System.DateTime");
          dt_step1.Columns.Add(PAY_DATE);//4

          DataColumn Age = new DataColumn("Age");
          Age.DataType = System.Type.GetType("System.Double");
          dt_step1.Columns.Add(Age); //5

          System.Console.WriteLine("foreach (var a in ls)=" + ls.Count());
          //System.Console.WriteLine("foreach (var a in query3)=" + query3.Count());

              foreach (var a in Sheet1)
              {

                  var row = dt_step1.NewRow();
                  row["CusID"] = a.CusID;
                  row["Name"] = a.Name; //1
                  row["BUDGET"] = a.BUDGET;//2
                  row["PAY_DATE"] = Convert.ToDateTime(a.PAY_DATE);//3    
                  System.Console.WriteLine(a.PAY_DATE);
                  row["Age"] = a.Age;//4
                  dt_step1.Rows.Add(row);
              }


          if (dt_step1.Rows.Count > 0)
          {
              System.Console.WriteLine("หลัง foreach dt_step1.Rows.Count=" + dt_step1.Rows.Count);
          }
          
		  //IEnumerable<DataRow> query_step2;                             
          if (comboBox1.Text == "25ปีขึ้นไป")
          {
              query_step2 = from l2 in dt_step1.AsEnumerable()
                            where l2.Field<double>("Age") >= 25
                            select l2;
          }
          else
          {
              double xunit_due = double.Parse(comboBox1.Text);
              query_step2 = from l2 in dt_step1.AsEnumerable()
                            where l2.Field<double>("Age") == xunit_due
                            select l2;
          }

          var rowSources = query_step2.AsEnumerable();
          System.Console.WriteLine("query_step2="+ query_step2.Count() + " rowSources=" + rowSources.Count());
          if (rowSources.Any())
          {
              DataTable dtt = rowSources.CopyToDataTable();
              System.Console.WriteLine("rows.CopyToDataTable()=" + dtt.Rows.Count);
              dt_step1.Clear();
              if (dtt.Rows.Count > 0)
              {
                  System.Console.WriteLine("dt.Rows.Count=" + dtt.Rows.Count);

                  dataGridView1.Columns.Clear();
                  dataGridView1.Rows.Clear();
                  columnx();
                  int row = dtt.Rows.Count - 1;              
                  for (int r = 0; r <= row; r++)
                  {
                      progressBar1.Visible = true;
                      progressBar1.Maximum = row;
                      if (progressBar1.Value <= row - 1)
                      {
                          progressBar1.Value = progressBar1.Value + 1;
                      }
                      dataGridView1.Rows.Add();
                      dataGridView1.Rows[r].Cells[0].Value = dtt.Rows[r].ItemArray[0].ToString();
                      dataGridView1.Rows[r].Cells[1].Value = dtt.Rows[r].ItemArray[1].ToString();
                      dataGridView1.Rows[r].Cells[2].Value = dtt.Rows[r].ItemArray[2].ToString();
                      dataGridView1.Rows[r].Cells[3].Value = dtt.Rows[r].ItemArray[3].ToString();
                      dataGridView1.Rows[r].Cells[4].Value = dtt.Rows[r].ItemArray[4].ToString();

                  }
              }
          }
          else
          {
              System.Console.WriteLine("else");
          }
      }
  }

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-11-12 17:16:51 By : Takashi_7
 


   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามคำสั่ง LINQ to Oracle โดยใช้ Entity Framework จะต้องใช้งาน return เป็น datatable ตาม code ด้านใน
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่