2015-10-21 3 views
0

У меня есть два DataTables,Linq для сравнения двух DataTables и фильтрации данных

 Id  Name 
     1  Alex 
     2  Hiro 

и мой второй DataTable является

 Field | 1 | 1_Value | 2  | 2_Value 
     Salary | 123.4| Good  | 245 | Bad 
     CTC  | 25.4 | Bad  | 300 | good 

первый идентификатор таблицы значений 1, 2 представляют собой столбец второй таблицы. Я хочу сравнить обе таблицы с помощью Id - столбец отношения с помощью LINQ и мой ожидается, фильтрованный выход должен выглядеть

 [{ 
     "Id" : 1 , "Name": "Alex", 
     "data" : [123.4, 25.4] ,"values":["Good" ,"Bad"]}, 
     { 
     "Id" : 2 , "Name": "Hiro", 
     "data" : [245, 300] ,"values":["Bad","Good" ]} 
     ] 

Мой код попытка использует Еогеасп петли как

 if (ds.Tables[1].Rows.Count > 0) 
       { 
        var comparisonDetail = (from DataRow dataRow in ds.Tables[1].Rows 
              select new cls.MyBaseClass() 
              { 
               ID = Convert.ToInt64(dataRow["ID"]), 
               Name= Convert.ToString(dataRow["Name"]) 
              } 

              ).ToList(); 
        foreach (var vId in comparisonDetail) 
        { 
         foreach(var vRow in ds.Tables[2].Rows) 
         { 
      vId.Data = vRow.value. 

         } 
        } 

Как я могу добиться этого с помощью C# linq? Помощь будет оценена

+1

Почему вы формируете вторую таблицу данных, как это? Сначала вы должны попытаться создать более нормализованную структуру данных. –

+1

DataSets и DatTables поддерживают отношения, что означает, что вам действительно не нужно ничего делать, чтобы присоединиться к двум связанным таблицам. Вторая таблица, однако, выглядит поворотной, что делает ее практически непригодной. Если его исходным источником является таблица «EmployeeData» с полями Salary, CTC, просто загрузите * эту * таблицу и создайте отношение внешних ключей между ними. –

ответ

0

Вы хотите использовать присоединиться (join clause (C# Reference))

using(var c = DataBaseConnection()) 
{ 
var data=from r in c.firstTable 
      join st in c.SecondTable on r.Id equals st.FieldId 
      select new 
       { 
        // create return object 
       }; 
} 
+0

Это, вероятно, невозможно. Вторая таблица OP денормализуется (выглядит как сводная таблица, а точнее, две) с двумя * столбцами * для каждого сотрудника, что означает, что нет никаких фиксированных полей для присоединения –

+0

Когда я пытаюсь установить соединение между двумя таблицами, он бросает error "Не удалось найти шаблон запроса реализации для sourcetype System.Data.datatble. 'Join' not found" –

+0

Не могли бы вы опубликовать структуру ваших таблиц (без данных, только структура)? – Lokki

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