簡體   English   中英

將Linq查詢聯接到DataTable並將結果聯接到DataView

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM