2010-10-07 53 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