質問

LINQ クエリを ASMX Web サービスとして公開するにはどうすればよいでしょうか?通常、ビジネス層からは型付きの値を返すことができます。 DataSet または DataTable ASMX 経由で転送するためにシリアル化できます。

LINQ クエリでも同じことを行うにはどうすればよいですか?入力されたものを入力する方法はありますか DataSet または DataTable LINQクエリ経由ですか?

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 クエリの結果セットを取得するにはどうすればよいですか? DataSet または DataTable?あるいは、LINQ クエリは ASMX Web サービスとして公開できるようにシリアル化可能ですか?

役に立ちましたか?

解決

質問で述べたように、 IEnumerable があります CopyToDataTable 方法:

IEnumerable<DataRow> query =
    from order in orders.AsEnumerable()
    where order.Field<DateTime>("OrderDate") > new DateTime(2001, 8, 1)
    select order;

// Create a table from the query.
DataTable boundTable = query.CopyToDataTable<DataRow>();

なぜそれがうまくいかないのでしょうか?

他のヒント

このクエリを実行するには、 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' に暗黙的に変換することはできません。明示的な変換が存在します (キャストが欠落していますか?)

データ転送オブジェクトのセット、いくつかのマッパーを作成し、それを .asmx 経由で返します。
あなたがすべき 一度もない プロシージャ スキーマの変更は気付かないうちに Web サービス コンシューマに伝播するため、データベース オブジェクトを直接公開します。

戻り値の型を使用する場合、 IEnumerable, を返却できます。 クエリ 変数を直接指定します。

クラスオブジェクトを作成し、 list(T) クエリの。

戻り値の型を使用する場合、 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>();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top