我正在使用Linq to Sql。当我的StoredProcedure执行其结果ll以的形式返回IMultipleResults。转换/ Casting ISingleResult - 列出值到DataTable没有循环
我将它转换为ISingleResults它可以是铸造为列表。
所以我需要将其转换为数据表,这样我可以将其绑定到数据集和值传递给UI。
但我想这样的方法,我可以转换它没有LOOP。
请任何机构帮助我。
对于任何澄清与我联系。
感谢你。
我正在使用Linq to Sql。当我的StoredProcedure执行其结果ll以的形式返回IMultipleResults。转换/ Casting ISingleResult - 列出值到DataTable没有循环
我将它转换为ISingleResults它可以是铸造为列表。
所以我需要将其转换为数据表,这样我可以将其绑定到数据集和值传递给UI。
但我想这样的方法,我可以转换它没有LOOP。
请任何机构帮助我。
对于任何澄清与我联系。
感谢你。
首先,你可能想看看,如果你能投你的名单到的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;
}
}
但正如你所看到的,其他的扩展功能“地图”无非是可以在线使用的foreach更多。如果那不是你想要的,那么我表示歉意,并且会试着想出一个不同的方式。
还值得注意的是,我不确定是否分配给项目数组是填充行的最佳方法,所以如果它不起作用,请让我知道,以便我可以起草另一个版本的函数。
希望这会有所帮助!
先生,我没有得到代码,你可以让它变得简单,我不想在代码中使用任何循环,所以试着去做。 – 2010-10-11 04:36:03
因此,将它作为'BindingList'投射不起作用? – diceguyd30 2010-10-11 12:14:04
只是想知道为什么你的数据层使用存储过程,你的业务逻辑使用LINQ和你的UI使用数据集。也许你可以考虑在UI中使用你的linq对象?您可以像数据集一样轻松地将List绑定到数据网格。对我来说,这看起来像是很多转换。 – Peter 2010-10-07 09:24:02
我正在使用storedprocedure检索数据,我需要数据集将其绑定到我的数据源。所以,如果你知道的东西,然后帮助我并发布你的解决方案 – 2010-10-07 17:54:49