Задача: выполнить запрос на 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