2013-09-27 5 views
0

мне нужно сделать этот запрос в LINQ на DataTable объектаAsp.NET DataTable запрос с использованием LINQ

Select * from mydatatable m where m.id==myid group by myField 

Если я пытаюсь этот код у меня есть ошибки на CopyToDataTable()

int _idOrg=10; 
DataTable dtAbb = (DataTable)ViewState["dtAbb "]; 
      var var_sez = from myRow in dtAbb .AsEnumerable() 
           group myRow by myRow.Field<string>("ID_IST") into newRow 
           where newRow.First().Field<int>("ID_ORG") == _idOrg 
           select newRow; 
DataTable dtSez = null; 
if (var_sez.Count() > 0) 
    dtSezione = var_sez.AsEnumerable().CopyToDataTable(); 
+1

Публикация сообщения об ошибке будет приятно прикасаться –

ответ

1

You не могут использовать CopyToDataTable по выбору групп DataRows, но только на IEnumerable<DataRow>. Таким образом, вам нужно либо взять все строки из каждой группы (но зачем вообще группировать их), либо использовать определенную строку каждой группы. Здесь я просто взять первый:

var var_sez = from myRow in dtAbb.AsEnumerable() 
       where myRow.Field<int>("ID_ORG") == _idOrg 
       group myRow by myRow.Field<string>("ID_IST") into grp 
       select grp.First(); 

Обратите внимание, что я также переместил Where перед GroupBy. Вы выбираете только группы, в которых идентификатор первой строки соответствует указанному идентификатору. Я предполагаю, что вы wahnt только строк с этим ID. Следовательно, этот подход является «более важным» и более эффективным.

0

Если вы хотите использовать результат по вашему запросу ToDataTable - вам нужно немного расширить LINQ.

Книга «LINQ in Action» имеет приятный спутник для общения here. Качайте, найти ObjectShreder.cs и DataSetLinqOperators.cs включить их в свой проект и методы становятся доступными для других, чем IEnumerable<DataRow>

Ссылка типов: http://codecorner.galanter.net/2009/12/17/grouping-ado-net-datatable-using-linq/

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