1

LINQ To DataSetを使用してデータベースにアクセスし、.ASMXWebサービスを介してSilverlightにデータを送信しようとしているSilverlightプロジェクトに取り組んでいます。

サーバーエクスプローラーツールを使用してデータセットを定義しました(関心のあるさまざまなテーブルをすべてドラッグアンドドロップします)。DataSetは、問題なくサーバーとデータベースにアクセスできます。

以下は私のWebメソッドの1つからのコードです:

    public  List<ClassSpecification> getSpecifications()
    {
        DataSet2TableAdapters.SpecificationTableAdapter Sta = new DataSet2TableAdapters.SpecificationTableAdapter();

        return (from Spec in Sta.GetData().AsEnumerable()
                select new ClassSpecification()
                {
                    Specification = Spec.Field<String>("Specification"),
                    SpecificationType = Spec.Field<string>("SpecificationType"),
                    StatusChange = Spec.Field<DateTime>("StatusChange"),
                    Spec = Spec.Field<int>("Spec")
                }).ToList<ClassSpecification>();
    }

データを含む「ClassSpecification」データクラスを作成しました。これには、すべてのテーブルフィールドがプロパティとして含まれています。

私の質問は、ここに示されているものよりも迅速に割り当てを行う方法はありますか?実際にはさらに約10個のフィールドがあり、DataSetはテーブル定義を知っているので、フィールドごとに移動するよりもすばやく割り当てを行うことができると思います。「新しいClassSpecification())。ToListを選択してみました

どんな助けでも大歓迎です。

4

2 に答える 2

0

データベースへのLinqプロバイダーがないためにデータセットを使用していますか? それが、私がこの動きを検討する唯一の理由です。たとえば、Linq to Sql を使用すると、テーブルをドラッグしてドロップできます。次に、必要な形状のインスタント オブジェクトを作成します。

于 2010-03-31T02:21:10.167 に答える
0

まず、無料で素晴らしい LINQPad を使用してさまざまな可能性をテストすることをお勧めします。

テーブル アダプターから何ができるかはよく覚えていませんが、DataSet を使用して必要なデータを取得できるはずです。

string spec = myDataSet.MyTable.Rows[0] // or FindBy... or however you are choosing a row
    .Specification;

だからあなたはできるかもしれません

foreach(var row in myDataSet.MyTable.Rows) {
    string spec = row.Specification;
    ...
}

または

return (from row in myDataSet.Specification
    select new ClassSpecification()
    {
        Specification = row.Specification,
        SpecificationType = row.SpecificationType,
        StatusChange = row.StatusChange,
        Spec = row.Spec,
    }).ToList<ClassSpecification>();

あるいは

return myDataSet.Specification.Cast<ClassSpecification>()

最後の方法が機能するかどうかはわかりませんが、必要なものを取得する方法がいくつかあることがわかります。また、私のテストでは、行は厳密に型指定されているため、データを配置する新しいクラスを作成する必要はありません。既存の「SpecificationRow」クラスを使用できるはずです。(実際、これは貧血ドメインモデルのアンチパターンだと思います。)

于 2010-02-03T00:27:16.687 に答える