ahmed_sa Ответов: 2

Как получить одинаковые элементы существуют в двух таблицах данных в третьей таблице данных


Проблема

Как получить одинаковые элементы существуют в двух таблицах данных в третьей таблице данных с помощью linq и отображаются в datagridview

в приложении windows form visual studio 2015.

Это означает, что у меня есть две таблицы данных

Первая таблица данных-это dt Get data from Excel .

Во-вторых, dtItems получает данные из базы данных sql server 2014 .

Мне нужно, когда у меня есть itemcode 12 и этот элемент существует на двух таблицах данных

dt(отображение данных из excel) и dtItems (отображение данных из sql server)

покажите их в datagridview

если артикул 12 существует на ДТ и dtItems отображения элемента управления datagridview .

так что как получить похожие it-элементы между двумя datatable by linq to sql в datagridview .

Что я уже пробовал:

public DataTable ShowExcelData()
        {
            string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", txtpath.Text);

            OleDbConnection con = new OleDbConnection(connectionString);


            con.Open();
            DataTable dt = new DataTable();

            dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

            string SheetName = dt.Rows[0]["TABLE_NAME"].ToString();


            OleDbCommand com = new OleDbCommand();
            com.Connection = con;
           
            com.CommandText = @"SELECT  [ItemCode],[ItemsName],[ItemAddress] FROM  [" + SheetName + "] ";
            OleDbDataAdapter oledbda = new OleDbDataAdapter();
            oledbda.SelectCommand = com;
            DataSet ds = new DataSet();
            oledbda.Fill(ds);
            dt = ds.Tables[0];
            con.Close();
            return dt;


        }
dt = ShowExcelData();

 public DataTable GetSqlItems()
        {
            string GetItems = @"select ItemCode,ItemsName,ItemAddress from Items";


           DataTable tbGetItems = DataAccess.ExecuteDataTable(GetItems );
            return tbGetItems ;
        }
dtItems = GetSqlItems();

2 Ответов

Рейтинг:
2

lw@zi

Вы можете выполнять соединения на DataTable объекты, использующие LINQ Для этого вам нужно будет сначала позвонить AsEnumerable на DataTable объект. Этот метод будет доступен, если вы добавите System.Data.Data.DataSetExtensions пространство имен.

Вот пример кода, соединяющего таблицы один и два в первом столбце.

// Prepare first table
DataTable firstTable = new DataTable();
firstTable.Columns.Add("0");
firstTable.Columns.Add("1");

DataRow firstRow1 = firstTable.NewRow();
firstRow1[0] = "1";
firstRow1[1] = "First Table First Row";
firstTable.Rows.Add(firstRow1);

DataRow secondRow1 = firstTable.NewRow();
secondRow1[0] = "02";
secondRow1[1] = "Should not come up";
firstTable.Rows.Add(secondRow1);

// Prepare second table
DataTable secondTable = new DataTable();
secondTable.Columns.Add("0");
secondTable.Columns.Add("1");

DataRow firstRow2 = secondTable.NewRow();
firstRow2[0] = "1";
firstRow2[1] = "Second table first row";
secondTable.Rows.Add(firstRow2);

DataRow secondRow2 = secondTable.NewRow();
secondRow2[0] = "2";
secondRow2[1] = "Second table second row";
secondTable.Rows.Add(secondRow2);


// Join them on first column and show all four columns from both tables
var joinedResult = firstTable.AsEnumerable().Join(secondTable.AsEnumerable(), first => first[0], second => second[0], (first, second) => new
{
First0 = first[0], Second0 = second[0], First1 = first[1], Second1 = second[1]
}

);


Рейтинг:
1

Maciej Los

Самый простой способ получить общие данные-это использовать Linq предложение join[^].

Видеть:

var commondata = from exd in ExcelDataTable.AsEnumerable()
    join sqd in SqlDataTable.AsEnumerable() on exd.Fields<int>("ItemCode") equals sqd.Fields<int>("ItemCode")
    select sqd