2016-09-30 3 views
0

У меня есть две таблицы с именем таблицы 1 и таблицы 2: Теперь я хочу, чтобы заполнить столбец, который находится в таблице 2 из колонки, которая находится в таблице 1.Присоединяйтесь к DataTable с помощью Linq

table 1 

Date | Value 
------------- 
5  | 678 
10 | 135 
15 | 420 


table 2 
Date | Value | Value2 
------------------------ 
1  | 100 | 
2  | 200 | 
3  | 300 | 
4  | 400 | 
5  | 500 | 678 
6  | 600 | 
7  | 700 | 
8  | 800 | 
9  | 900 | 
10 | 1000 | 135 
11 | 1100 | 
12 | 1200 | 
13 | 1300 | 
14 | 1400 | 
15 | 1500 | 420 
16 | 1600 | 
17 | 1700 | 

Я использую ниже код для заполнения данных с использованием цикла foreach. Но для оценки требуется больше времени. Я хочу использовать Linq. Может кто-нибудь мне помочь ?

foreach (DataRow row in table.Rows) 
      { 

       string date= Convert.ToString(row["date"]); 
       if (!string.IsNullOrEmpty(date)) 
       { 
        foreach (DataRow sheetRow in table1.Rows) 
        { 
         if (sheetRow["Date"] != DBNull.Value) 
         { 
          // Assuming that given columns in both datatables are of same type 
          if (Convert.ToDateTime(date) == Convert.ToDateTime(sheetRow["Date"])) 
          { 
           row["Value"] = sheetRow["Value"]; 
           break; 
          } 
         } 
        } 
       } 
       return table2; 
+0

Возможно, вам поможет http://stackoverflow.com/a/11593/316799 –

+1

Я ничего не знаю о linq, но то, что вы хотите сделать, - это один оператор SQL, поэтому я был бы очень удивлен, если бы вам нужны какие-либо петли для linq , Все, что вам нужно сделать, это выбрать значения из таблицы 1 и вставить их в таблицу 2, где совпадают даты. –

+0

«Требуется больше времени для оценки» - больше времени, чем что? Linq не делает looping _faster_, что делает его более простым для кода_. Он по-прежнему использует петли за кадром. –

ответ

0

попробовать это

context.table2.Join(context.table1, t2 => t2.Date, t1 => t1.Date, (t2, t1) => t2.Value2 = t1.value); 

дайте мне знать, если это помогает.

+0

Пробовал ли вы, что было бы результатом этого запроса linq, также этот запрос будет выполнять назначение, как было предложено. Также почему значение присваивается значению2. Чтобы исправить ответное назначение t2, так что результат будет конечным DataTable –

Смежные вопросы