我正在使用 Linq to Sql 。当我 StoredProcedure 执行其结果时,ll以 IMultipleResults 的形式返回。
我将其转换为 ISingleResults ,它可以作为列表。
所以我需要将其转换为DataTable 以便我可以将其绑定到数据集并将值传递给UI。
但我想要这样的方法,我可以转换它而不用LOOP 。
请任何人帮助我。
任何澄清请与我联系。
感谢你。
答案 0 :(得分:0)
首先,您可能想看看是否可以将列表转换为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是否是填充行的最佳方式,所以如果它不起作用,请告诉我,以便我可以起草另一个版本的函数。
希望这有帮助!