LinQ запрос к DataTable

Задача: выполнить запрос на LinQ к DataTable. Стандартная DataTable LinQ не поддерживает, но решается это затруднение очень просто, надо использовать метод AsEnumerable() из LinQ to Dataset.

string someTextValue = (from dataRow in someDataTable.AsEnumerable()
                   where dataRow.Field<int>("VALUE_ID") == valueId
                   select dataRow.Field<string>("VALUE_TEXT") ).Single();

// тоже самое методическим синтаксисом (method syntax)
string someTextValue = someDataTable.AsEnumerable(). Where(dataRow => dataRow.Field<int>("VALUE_ID") == valueId). Select(dataRow => dataRow.Field<string>("VALUE_TEXT")).Single(); 

Таблица должна быть строго типизирована, иначе получим ошибку Specified cast is not valid. Минимальный код для динамически создаваемой DataTable:

someDataTable.Columns.Add(new DataColumn("VALUE_ID", System.Type.GetType("System.Int32")));

Также в виде костыля можно использовать конвертацию прямо внутри запроса LinQ

int someCountById = someDataTable.AsEnumerable().Where(dataRow => Convert.ToInt32(dataRow["SOME_INT_ID"]) == 1).Count();

Returning a single value with Linq to SQL
LINQ query on a DataTable
How to: Write LINQ Queries in C#
Lambda Expressions (C# Programming Guide)
IEnumerable Interface


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>