1

Linq式を2つのタイプ間で変換する方法を理解しようとしています。1つはビジネスリポジトリにあり、もう1つはドメインリポジトリにあります。どちらのタイプにも、クエリで使用される同じデータプロパティがあります。私のビジネスレイヤーには、ビジネスエンティティに基づいてクエリを実行する次のメソッドがあります。

BUSINESS REPOSITORY:ドメインエンティティがビジネスエンティティに変換されました

public IQueryable<CustomerVendorProduct> Query(Expression<Func<CustomerVendorProduct,bool>> filterInBusinessRepo)

したがって、消費者は次のようなことを行うことができます。

var list = BusinessRepository.Query(c => c.CustomerId == 77);

CustomerId==77のCustomerVendorProductビジネスオブジェクトのリストを取得します。

ビジネスリポジトリのQuery()メソッド内で、ドメインリポジトリで次のメソッドを呼び出す必要があります。データベースから生の暗号化されたドメインエンティティを取得します。そのクエリには、ドメインリポジトリで使用されるエンティティタイプが必要であることに注意してください。これは当社の事業体に関連していますが、単にCRUDの運用に関与しています。

ドメインリポジトリ:データベースからの生の暗号化されたエンティティ

public IQueryable<CustomerVendorProductEntity> Query(Expression<Func<CustomerVendorProductEntity, bool>> filter)

したがって、ビジネスリポジトリのQuery()メソッドは、次のようになります。

var domainList = DomainRepository.Query(filterInBusinessRepo);

結果は、CustomerVendorProductEntityオブジェクトのリストになります。次に、ビジネスリポジトリはそれらをCustomerVendorBusinessエンティティに変換し、呼び出し元に返します。

だから、私の質問は、Linq式をビジネスリポジトリエンティティタイプ:CustomerVendorProductからドメインリポジトリエンティティタイプ:CustomerVendorProductEntityに変換するにはどうすればよいですか?変換方法を作成する必要があると思います...次のようなものです...しかし、変換を実行する方法がわかりません。私は本当にあなたの助けをいただければ幸いです:

    // Convert the Linq Expression from our Business Layer to our Domain Layer.
    private Expression<Func<CustomerVendorProductEntity, bool>> CVPToCVPE(Expression<Func<CustomerVendorProduct, bool>> filter)
    {
        var parms = System.Linq.Expressions.Expression.Parameter(typeof(CustomerVendorProductEntity), "destination");

        var result = System.Linq.Expressions.Expression.Lambda<Func<CustomerVendorProductEntity, bool>>(filter, parms);

        return result;
    } 

お手数をおかけしますが、よろしくお願いいたします。マイク

2012年11月2日:うわー、返信はありませんか?特にMVCアプリケーション内で、他の多くの開発者がこの問題に遭遇したと思います...まだ助けを望んでいます...

4

2 に答える 2

0

少し前に開発した MVC アプリでこのようなことを行いましたが、エンティティ オブジェクトのセットは 1 つしかありませんでした (つまり、ビジネス レイヤーは ORM と同じエンティティを使用していました)。これはかなりうまく機能しました (基本的な CRUD 機能のみを備えた基幹業務アプリ) が、渡されるすべての式で少し混乱しました。

あなたの場合、変換コードで言及したように、ビジネス リポジトリの式ツリーをトラバースし、ドメイン リポジトリ オブジェクトを使用してそれを再作成することに行き詰まると思います。おそらく実装や完全な検証が簡単ではないことを除いて、これについて提案することはできません。

「実際の」MVCアプリケーションでほとんどの場合、式はレイヤー間で渡されず、代わりに標準APIを使用して、最終的にデータレイヤーのクエリに組み込まれるものを渡します。

于 2012-11-02T19:52:51.933 に答える
0

複雑なマッピングを持つ型から別の型への式ツリーの変換

これは、私が男性を助けた非常によく似た質問への回答です。それをチェックして、これがあなたのニーズを満たさない場合はお知らせください。

于 2013-02-25T18:57:27.867 に答える