0

I need some help working with an IQueryable collection of data items and then selecting them into a new form.

The following method is called to get some data from a repository:

var data = this.repository.GetAllPersonalDetails();

I want to then convert each item in the collection to a business object which I do using the following:

var businessTypes = data.Select(dataType => new PersonalDetails
    {
        FirstName = dataType.FirstName
        ...etc.
    });

This works fine and all is well, but the business object is quite big and I would like to make use of an adapter function that maps a data object to a business object. However, if I use code similar to the following:

var businessTypes = data.Select(dataType => this.ConvertToBusinessObject(dataType));

Then the whole Queryable pipeline gets messed up and I get exceptions when the query is eventually executed.

Does anyone know if what I'm trying to do is possible? It would be great if it was as we use adapter functions to convert between objects in a number of places and I'd rather re-use them instead of having to do the full conversion inline.

4

3 に答える 3

1

私自身の質問に答えて、この質問への回答で与えられたガイダンスは私にとって完璧に機能しました.

IQueryable<T> オブジェクトを別のオブジェクトに変換していますか?

于 2013-10-30T15:09:11.687 に答える
1

問題は、リポジトリ オブジェクトからビジネス オブジェクトへのマッピングをどこかに定義する必要があるということです。これなしでは、または LINQ select を使用しても機能しません。

データベース オブジェクトをビジネス オブジェクトにマップするさまざまな ORM (オブジェクト リレーショナル マッパー) が多数ありますが、それでもいくつかのアダプターを生成する必要があります。たとえば、Entity Framework はテンプレートを使用してマッピング クラスを生成し、それらをコンテキスト タイプの下に非表示にするため、煩わされることはありません。

既存のマッパーを使用したくない、または使用できない場合は、独自のアダプターを作成できます。アダプターについて話しているときは、その方法を既に知っていると思います。

于 2013-10-25T13:08:17.960 に答える
-1

AutoMapperはあなたが探しているものです。

AutoMapper は、一見複雑な問題を解決するために構築された単純な小さなライブラリです。つまり、あるオブジェクトを別のオブジェクトにマップするコードを削除します。

于 2013-10-25T12:54:12.867 に答える