[英]Linq type conversion on generic types
我找到了這個代碼,但即使我嘗試了很多轉換后它也無法運行。 基本上它巧妙地將Datatable轉換為可序列化的List。
錯誤是它無法將Dictionary<string, object>
轉換為List<object>
:
public GridBindingData GetSomething() {
DataTable dt = GetDatatable();
var columns = dt.Columns.Cast<System.Data.DataColumn>();
var data = dt.AsEnumerable()
.Select(r => columns.Select(c => new { Column = c.ColumnName, Value = r[c] })
.ToDictionary(i => i.Column, i => i.Value != System.DBNull.Value ? i.Value : null))
.ToList<object>();
return new GridBindingData() { Data = data , Count = dt.Rows.Count };
}
我嘗試了很多轉換,包括:
List<object> newdata = (List<object>)data.AsEnumerable().Cast<object>();
基本上,GridBindingData的Data屬性必須具有List<object>
。 那可能嗎?
嗯。 要看到你得到的錯誤並不容易,但也許你需要.Cast<object>().ToList()
:
var data = dt.AsEnumerable()
.Select(r => columns.Select(c => new { Column = c.ColumnName, Value = r[c] })
.ToDictionary(i => i.Column, i => i.Value != System.DBNull.Value ? i.Value : null))
.Cast<object>()
.ToList();
編輯這應該完美無缺,在REPL中測試:
csharp> new Dictionary<string, string> { {"key","value"} }.ToList().Cast<object>();
{ [key, value] }
csharp> new Dictionary<string, string> { {"key","value"} }.Cast<object>().ToList();
{ [key, value] }
data = dt.AsEnumerable()
.Select(r => columns.Select(c => new { Column = c.ColumnName, Value = r[c] })
.ToDictionary(i => i.Column, i => i.Value != System.DBNull.Value ? i.Value : null))
.Select(x => (object)x)
.ToList();
答案取決於您對結果的要求:字典鍵,值,兩者?
假設您希望將值作為對象,這應該這樣做:
data = dt.AsEnumerable()
.Select(r => columns.Select(c => new { Column = c.ColumnName, Value = r[c] })
.ToDictionary(i => i.Column, i => i.Value != System.DBNull.Value ? i.Value : null))
.Select(x => (object)x.Value)
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.