C# 将ISingleResult-列表值转换/强制转换为DataTable而不循环

C# 将ISingleResult-列表值转换/强制转换为DataTable而不循环,c#,linq,datatable,dataset,C#,Linq,Datatable,Dataset,我正在使用Linq to Sql。当MyStoredProcess执行其结果时,ll以IMultipleResults的形式返回 我正在将它转换为isingresults,并且它可以铸造为List 因此,我需要将其转换为DataTable,以便将其绑定到Dataset并将值传递到UI。 但是我想要这样的方法,我可以转换它而不需要循环 请任何人帮帮我 如需任何澄清,请联系我 谢谢。首先,您可能想看看是否可以将列表强制转换为BindingList,或者执行以下操作: BindingListX = N

我正在使用Linq to Sql。当MyStoredProcess执行其结果时,ll以IMultipleResults的形式返回

我正在将它转换为isingresults,并且它可以铸造为List

因此,我需要将其转换为DataTable,以便将其绑定到Dataset将值传递到UI。

但是我想要这样的方法,我可以转换它而不需要循环

请任何人帮帮我

如需任何澄清,请联系我


谢谢。

首先,您可能想看看是否可以将列表强制转换为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;
        }
    }
公共静态类HelperFunctions
{
公共静态无效映射(此IEnumerable源,Action func)
{
foreach(源中的ti)
func(i);
}
公共静态数据表ToDataTable(此IEnumerable源)
{
var dt=新数据表();
var properties=typeof(T).GetProperties();
AddRange(properties.Select(x=>newdatacolumn(x.Name,x.PropertyType)).ToArray();
Select(x=>dt.NewRow().ItemArray=properties.Select(y=>y.GetValue(x,null)).ToArray()).Map(x=>dt.Rows.Add(x));
返回dt;
}
}
但是正如您所看到的,另一个扩展函数“Map”只不过是一个可以内联使用的foreach。如果这不是你想要的,那么我向你道歉,并尝试想出一个不同的方法

还值得注意的是,我不确定分配给项数组是否是填充行的最佳方式,因此如果它不起作用,请让我知道,以便我起草另一个版本的函数


希望这有帮助

只是想知道为什么您的数据层使用存储过程,您的业务逻辑使用linq,您的UI使用数据集。也许你可以考虑在UI中使用你的LINQ对象?可以像数据集一样轻松地将列表绑定到数据网格。对我来说,这似乎是一个非常多的转换。我正在使用storedprocedure检索数据,我需要dataset将其绑定到我的数据源。所以,如果你知道一些事情,那么请帮助我发布你的解决方案。先生,我没有得到代码,你可以让它变得简单,我不想在我的代码中使用任何循环,所以请尝试这样做。