2010-10-07 57 views
1

我正在使用Linq to Sql。当我的StoredProcedure执行其结果ll以的形式返回IMultipleResults转换/ Casting ISingleResult - 列出值到DataTable没有循环

我将它转换为ISingleResults它可以是铸造为列表

所以我需要将其转换为数据表,这样我可以将其绑定到数据集值传递给UI。

但我想这样的方法,我可以转换它没有LOOP

请任何机构帮助我。

对于任何澄清与我联系。

感谢你。

+1

只是想知道为什么你的数据层使用存储过程,你的业务逻辑使用LINQ和你的UI使用数据集。也许你可以考虑在UI中使用你的linq对象?您可以像数据集一样轻松地将List绑定到数据网格。对我来说,这看起来像是很多转换。 – Peter 2010-10-07 09:24:02

+2

我正在使用storedprocedure检索数据,我需要数据集将其绑定到我的数据源。所以,如果你知道的东西,然后帮助我并发布你的解决方案 – 2010-10-07 17:54:49

回答

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; 
     } 
    } 

但正如你所看到的,其他的扩展功能“地图”无非是可以在线使用的foreach更多。如果那不是你想要的,那么我表示歉意,并且会试着想出一个不同的方式。

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

希望这会有所帮助!

+1

先生,我没有得到代码,你可以让它变得简单,我不想在代码中使用任何循环,所以试着去做。 – 2010-10-11 04:36:03

+0

因此,将它作为'BindingList'投射不起作用? – diceguyd30 2010-10-11 12:14:04