[c#] 從LINQ查詢結果集中填充DataSet或DataTable



2 Answers

要對DataContext類執行此查詢,您需要執行以下操作:

MyDataContext db = new MyDataContext();
IEnumerable<DataRow> query = 
    (from order in db.Orders.AsEnumerable()
        select new
        {
            order.Property,
            order.Property2
        })
    as IEnumerable<DataRow>;
return query.CopyToDataTable<DataRow>();

沒有as IEnumerable<DataRow>; 你會看到下面的編譯錯誤:

不能將類型'System.Collections.Generic.IEnumerable'隱式轉換為'System.Collections.Generic.IEnumerable'。 存在明確的轉換(您是否缺少演員?)

Question

如何將LINQ查詢作為ASMX Web服務公開? 通常,從業務層,我可以返回一個類型化的DataSetDataTable ,它可以通過ASMX進行傳輸。

我怎樣才能為LINQ查詢做同樣的事情? 有沒有辦法通過LINQ查詢來填充類型化的DataSetDataTable

public static MyDataTable CallMySproc()
{
    string conn = "...";

    MyDatabaseDataContext db = new MyDatabaseDataContext(conn);
    MyDataTable dt = new MyDataTable();

    // execute a sproc via LINQ
    var query = from dr
                in db.MySproc().AsEnumerable
                select dr;

    // copy LINQ query resultset into a DataTable -this does not work !    
    dt = query.CopyToDataTable();

    return dt;
}

我怎樣才能得到一個LINQ查詢的結果集到一個DataSetDataTable ? 或者,LINQ查詢是否可序列化,以便我可以將它公開為ASMX Web服務?




如果使用IEnumerable的返回類型,它可以直接返回查詢變量。

MyDataContext db = new MyDataContext();
IEnumerable<DataRow> query = 
    (from order in db.Orders.AsEnumerable()
        select new
        {
            order.Property,
            order.Property2
        })
    as IEnumerable<DataRow>;
return query.CopyToDataTable<DataRow>();



如果您使用IEnumerable的返回類型,則可以直接返回查詢變量。




Related