Есть ли способ преобразовать результат выражения LINQ в DataTable
без перехода через каждый элемент?Как преобразовать результат LINQ в DATATABLE?
3
A
ответ
2
Нет способа создать его без stepping через каждый элемент. Выражение Linq вычисляется по мере необходимости, чтобы оно проходило через каждую строку (для сопоставления и выбора).
Я думаю, вы должны попробовать использовать DataTable.Select()
метод (MSDN link) вместо того, чтобы, как он возвращает массив DataRow
объектов, которые можно добавить в новую таблицу следующим образом:
var rows = [ORIGINAL DATA TABLE].Select("id>5");
var dtb=[ORIGINAL DATA TABLE].Clone();
foreach(DataRow r in rows)
{
var newRow = dtb.NewRow();
newRow.ItemArray = r.ItemArray;
dtb.Rows.Add(newRow);//I'm doubtful if you need to call this or not
}
5
Кредит this blogger, но я улучшил его алгоритм здесь. Сделайте себе метод расширения:
public static DataTable ToADOTable<T>(this IEnumerable<T> varlist)
{
DataTable dtReturn = new DataTable();
// Use reflection to get property names, to create table
// column names
PropertyInfo[] oProps = typeof(T).GetProperties();
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
colType = colType.GetGenericArguments()[0];
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
foreach (T rec in varlist)
{
DataRow dr = dtReturn.NewRow();
foreach (PropertyInfo pi in oProps)
dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);
dtReturn.Rows.Add(dr);
}
return (dtReturn);
}
Использование:
DataTable dt = query.ToADOTable();
Смежные вопросы
- 1. Преобразовать DataTable в Linq
- 2. Как преобразовать этот результат запроса LINQ обратно в объект DataTable?
- 3. Как преобразовать и присвоить результат запроса linq к datatable?
- 4. Как преобразовать запрос linq в datatable
- 5. Как преобразовать DataTable в группу по дате DataTable с LINQ?
- 6. Как заполнить DataTable с анонимным LINQ результат
- 7. Как преобразовать результат запроса Linq в XML?
- 8. как преобразовать результат запроса linq в arraylist?
- 9. Как преобразовать результат запроса LINQ в List?
- 10. Преобразовать DataTable в nestead класс по LINQ
- 11. Как преобразовать datatable в xml?
- 12. Как преобразовать IQueryable в DataTable
- 13. Получить Entity Linq выражение результат DataTable
- 14. Как получить результат запроса, если linq в DataTable?
- 15. Как преобразовать запрос Linq в DataTable, DataSet или DataView?
- 16. Результат LINQ в DataRow
- 17. Как преобразовать DataSet в DataTable
- 18. Datatable DataRow в Linq
- 19. LINQ: DataTable to List
- 20. Как выполнить Datatable Linq Union
- 21. Положите Linq .ToList() в datatable
- 22. Как преобразовать результат запроса linq в List (Of T)
- 23. Как создать DataTable в LINQ
- 24. Как использовать LINQ в DataTable?
- 25. как преобразовать список DataTable
- 26. Как преобразовать список DataTable
- 27. Fetch Linq to Entity результат непосредственно в Datatable
- 28. как преобразовать datarow в datatable
- 29. Как преобразовать список в DataTable
- 30. Как преобразовать Listview в DataTable
Я получаю эту ошибку при использовании кода: «CS0121: Вызов неоднозначен между следующими методами или свойствами: <а затем класс, содержащим ваш метод> «Вы знаете, как это решить? Спасибо за код, хотя, +1 – Phil
@Phil - не могу сказать, если вы не публикуете полный текст ошибки, который должен содержать ссылку на оба конкурирующих метода. Затем вы узнаете, какой другой метод имеет одну и ту же подпись. –
Вот и все .. это для них одинаковая подпись. Действительно странно! Во всяком случае, вот подпись, некоторые имена на шведском языке. Если вы не знаете напрямую, я просто отправлю вопрос об этом. Сообщение об ошибке: CS0121: вызов неоднозначен между следующими методами или свойствами: «Gruppkoll.App_Code.ConvertToDataTableFromLinqResult.ToADOTable (System.Collections.Generic.IEnumerable ) 'и' Gruppkoll.App_Code. ConvertToDataTableFromLinqResult.ToADOTable (System.Collections.Generic.IEnumerable ) ' –
Phil