[英]Joined Linq query to DataTable and result to DataView
我有兩個DataTables,Items和它的Groups。 我有一個linq查詢,通過加入2個表來獲取項目名稱及其組名稱。
EnumerableRowCollection<DataRow> dvquery = (from item in Items.AsEnumerable()
join grp in groups.AsEnumerable()
on item.Field<byte>("Group_ID") equals grp.Field<byte>("ID")
into item_grp_join
from itemgrp in item_grp_join
select new
{
ItemName = (string)led.Field<string>("Name"),
GName = (string)itemgrp.Field<string>("Name"),
});
DataView dv = dvquery.AsDataView();
但是我得到編譯時錯誤為
無法將類型'System.Collections.Generic.IEnumerable'隱式轉換為'System.Data.EnumerableRowCollection'。 存在顯式轉換(您是否缺少演員表?)
如何解決這個錯誤? 我可以輕松地將查詢結果轉換為列表,但是我只需要有一個dataview,這樣我就可以將其作為數據源提供給網格。
任何幫助表示贊賞。 謝謝
問題是您的查詢返回的是匿名類型的IEnumerable<T>
,您不能簡單地將其EnumerableRowCollection<DataRow>
轉換為EnumerableRowCollection<DataRow>
我現在確定您使用的是哪種類型的網格(例如,從winforms?WPF?ASP?ASP MVC?等),但是我希望您確實能夠將它傳遞給linq查詢的IEnumerable輸出。到-例如:
var query = (from item in Items.AsEnumerable()
join grp in groups.AsEnumerable()
on item.Field<byte>("Group_ID") equals grp.Field<byte>("ID")
into item_grp_join
from itemgrp in item_grp_join
select new
{
ItemName = (string)led.Field<string>("Name"),
GName = (string)itemgrp.Field<string>("Name"),
});
grid.DataSource = query; // or possible query.ToList() as you suggest in the question!
如果您確實需要使用DataView類型的對象,那么有關如何創建這些對象的博客文章,請嘗試:
請注意,如果您希望將網格用於雙向綁定(例如,將更改寫回到數據庫),則這不太可能“正常工作”-因為您的IEnumerable投影不會與數據源綁定在一起。
您將返回anonymous
對象列表。 最好從查詢結果中創建一個數據表。
var query = (from item in Items.AsEnumerable() .......
DataTable view = new DataTable();
view.Columns.Add("GroupName");
view.Columns.Add("ItemName");
foreach (var t in dvquery)
{
view.Rows.Add(t.GName, t.ItemName);
}
DataView dv = view.DefaultView;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.