0

次のメソッドをラムダ式に渡して結果をフィルタリングし、結果のリストで機能するコールバック メソッドを渡します。これはシステム内の特定のテーブルの 1 つにすぎません。この構造を何度も使用します。DBget などの一般的なメソッドを構築するにはどうすればよいでしょうか。DBget は、パラメーターとしてテーブルを受け取り (公正な ADO.NET データサービス エンティティ)、フィルター (ラムダ式) を渡します。

 public void getServiceDevelopmentPlan(Expression<Func<tblServiceDevelopmentPlan, bool>> filter, Action<List<tblServiceDevelopmentPlan>> callback)
        {
            var query = from employerSector in sdContext.tblServiceDevelopmentPlan.Where(filter)
                        select employerSector;


            var DSQuery = (DataServiceQuery<tblServiceDevelopmentPlan>)query;
            DSQuery.BeginExecute(result =>
            {
                callback(DSQuery.EndExecute(result).ToList<tblServiceDevelopmentPlan>());

            }, null);

    }

これでの私の最初のバッシュは次のとおりです。

public delegate Action<List<Table>> DBAccess<Table>(Expression<Func<Table, bool>> filter);
4

1 に答える 1

0

Linq to Ado.NET Dataservices または WCF Dataservices を使用している場合、モデルは多くの型付きを構築します。一般的には、選択してフィルタリングします。以下が必要です。すべてのメソッドは、これに加えて単なるキャンディーです。

クエリ タイプ 1 - 1 つのフィルター、リストを返します。

public  void makeQuery<T>(string entity, Expression<Func<T, bool>> filter, Action<List<T>> callback)
    {
        IQueryable<T> query = plussContext.CreateQuery<T>(entity).Where(filter);

        var DSQuery = (DataServiceQuery<T>)query;
        DSQuery.BeginExecute(result =>
        {
            callback(DSQuery.EndExecute(result).ToList<T>());
        }, null);

    }

クエリ タイプ 2 - 1 つのフィルター、単一のエンティティを返します。

public void makeQuery(string entity, Expression> filter, Action callback) {

        IQueryable<T> query = plussContext.CreateQuery<T>(entity).Where(filter);
        var DSQuery = (DataServiceQuery<T>)query;
        DSQuery.BeginExecute(result =>
        {
            callback(DSQuery.EndExecute(result).First<T>());
        }, null);

    }

あなたがする必要があるのは、これらをオーバーロードし、フィルターをフィルターの単純な配列に交換することです

Expression<Func<T, bool>>[] filter

そして、シングルリターンとリストリターンについて繰り返します。

1 つのデータコンテキストが必要な場合は、これをシングルトンにバンドルするか、ある種のハイブリッド ファクトリ/シングルトンでコンテキストの配列を追跡し、離れている場合に使用します。コンストラクターにコンテキストを取得させるか、コンテキストが提供されていない場合は独自のものを使用すると、離れてしまいます。

次に、これを大きな行で使用しますが、すべて 1 か所で行います。

GenericQuery.Instance.Create().makeQuery<tblAgencyBranches>("tblAgencyBranches", f => f.tblAgencies.agencyID == _agency.agencyID, res => { AgenciesBranch.ItemsSource = res; });

これは複雑に見えるかもしれませんが、多くの非同期マジックを隠しており、特定のインスタンスではボタン ハンドラーから直接呼び出すことができます。3 層システムではありませんが、時間を大幅に節約できます。

于 2010-01-27T11:56:40.057 に答える