2016-05-11 4 views
0

Попытка сделать то, что SQL-запрос (SELECT DISTINCT (first,second),third FROM table) будет делать, но я делаю это с LINQ и datatable.Отличие от нескольких столбцов в datatable


EDIT

SQL должен выглядеть как Mysql

select first, second, third FROM table group by first, second


DataTable secondTable = new DataTable(); 
secondTable.Columns.Add("name", typeof(string)); 
secondTable.Columns.Add("date", typeof(string)); 
secondTable.Columns.Add("clockIn", typeof(string)); 
secondTable.Columns.Add("clockOut", typeof(string)); 

var t4 = (from a in firstTable.AsEnumerable() 
select new 
{ 
    name = a.Field<string>("name"), 
    date = a.Field<string>("date"), 
    clockIn = a.Field<string>("clockIn"), 
    clockOut = a.Field<string>("clockOut") 
}).Distinct(); 

var t5 = (from a in firstTable.AsEnumerable() 
select new 
{ 
    name = a.Field<string>("name"), 
    date = a.Field<string>("date") 
}).Distinct(); 

var t6 = (from d in t5 
      join a in t4 
      on new 
      { 
       d.name, 
       d.date 
      } 
      equals new 
      { 
       a.name, 
       a.date 
      } 
      select secondTable.LoadDataRow(
      new object[] 
      { 
       d.name,d.date,a.clockIn,a.clockOut 
      }, false)).ToList(); 

ViewBag.Data = secondTable; 

Что этот код делает это, он присоединяется к t4 и t5 в t6 без исключений. В то время как я хочу, все строки из t4, которые присутствуют в t5, должны присоединиться к t6 на основе (имя, дата). И все строки из t5, которых не существует в t4, должны быть исключены. Кто-нибудь может помочь?

+0

Откуда взялась «firstTable»? – KaeL

+0

@KaeL Представьте, что 'firstTable' является исходной таблицей. – Jogi

+0

@KaeL во время отладки, я дважды проверял, 't4' и' t5' имеют в них нужные записи. Я делаю что-то не так с 't6'. – Jogi

ответ

1

Из ваших комментариев вы можете просто сгруппировать по требуемым полям и взять любой сгруппированный результат.

Вы можете заказать clockin или clockout, чтобы получить менее «случайный» результат.

var t6 = firstTable.AsEnumerable() 
        .GroupBy(a => new { 
            name = a.Field<string>("name"), 
            date = a.Field<string>("date") 
            } 
          ) 
        .Select(g => g.First()) 
        //or Select(g => g.OrderBy(a => a.Field<string>("clockIn")).First() 
        .ToList(); 
+0

Спасибо за ответ. На 'a.Field (« name »)' и 'a.Field (« name ») имеется красная строка ошибки:« Недопустимый декларатор участника анонимного типа. Анонимный тип member должен быть объявлен с назначением memeber, простым именем или доступом члена. – Jogi

+0

@RehanKhan отредактировал, я не работаю достаточно с datatables;) –

+0

Althaus. Понял. Пожалуйста, удалите свой комментарий, так как вы исправили свой ответ. благодаря – Jogi

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