Сначала вы можете захотеть посмотреть, можете ли вы привести свой список к BindingList или сделать что-то вроде этого:
BindingListX = New BindingList(Of elementX)(QueryResult.ToList())
Возможно, вы сможете связать это. Если это не сработает, то вот еще один вопрос: хотите ли вы вообще не использовать цикл в вашем коде или просто не видите цикл в вашем коде? Можно создать функцию расширения, которая выполняет преобразование:
public static class HelperFunctions
{
public static void Map<T>(this IEnumerable<T> source, Action<T> func)
{
foreach (T i in source)
func(i);
}
public static DataTable ToDataTable<T>(this IEnumerable<T> source)
{
var dt = new DataTable();
var properties = typeof(T).GetProperties();
dt.Columns.AddRange(properties.Select(x => new DataColumn(x.Name, x.PropertyType)).ToArray());
source.Select(x => dt.NewRow().ItemArray = properties.Select(y => y.GetValue(x, null)).ToArray()).Map(x => dt.Rows.Add(x));
return dt;
}
}
Но, как вы можете видеть, другая функция расширения 'Map' - это не что иное, как foreach, который можно использовать встроенным. Если это не то, чего вы хотите, тогда я приношу свои извинения и постараюсь придумать другой путь.
Стоит также отметить, что я не уверен, что присвоение Item Array - лучший способ заполнить строку, поэтому, если она не работает, пожалуйста, дайте мне знать, чтобы я мог набросать другую версию функции.
Надеюсь, это поможет!