3
IEnumerable<ContactPerson> results = _contactPersonRepository.GetContactPersons().Where(x => x.UserId == user.UserId);
IEnumerable<ContactPersonViewModel> contactPersons = results...

これどうやってするの?私は持っていてIEnumerable<X>、それをに変換したいですIEnumerable<Y>

これを行う方法はありますか?

よろしく

4

5 に答える 5

4

Select (プロジェクト Y を新しい型 X にプロジェクトする場合) またはCast (Y が X から継承されている場合) 拡張機能を使用ますIEnumerable<T>

IEnumerable<ContactPersonViewModel> contactPersons = 
    results.Select(p => CreateContactPersonViewModelFrom(p));

ContactPersonViewModel が ContactPerson の場合:

IEnumerable<ContactPersonViewModel> contactPersons = 
    results.Cast<ContactPersonViewModel>();

通常、ビュー モデルの作成には、エンティティからビュー モデルへの手動のプロパティ マッピングが含まれます。このような:

IEnumerable<ContactPersonViewModel> contactPersons = 
    results.Select(p => new ContactPersonViewModel {
                       Name = p.Name,
                       Phone = p.Phone
                   });

そのため、 Automapperなどのマッピング フレームワークを検討することもお勧めします。多くのマッピングを作成します。このコードは次のようになります。

IEnumerable<ContactPersonViewModel> contactPersons = 
    Mapper.Map<IEnumerable<ContactPersonViewModel>>(results);
于 2013-10-04T10:00:16.337 に答える
1

はい、Enumerable.Select:

var contactPersons = results.Select(r => new ContactPersonViewModel(r));

これは、 ;ContactPersonViewModelを取るコンストラクターがあることを前提としています。ContactPersonそうでない場合は、ビューモデルを初期化する別の方法を提供する必要があります。

于 2013-10-04T10:00:33.430 に答える
0

それを行う1つの方法はSelectメソッドです:

IEnumerable<ContactPersonViewModel> contactPersons = results.Select(x => new ContactPersonViewModel 
{
   Id = x.Id
   //...
});
于 2013-10-04T10:00:36.893 に答える
0

これが役立つ場合があります(Selectメソッドを使用できます):

  IEnumerable<ContactPersonViewModel> contactPersons = 
      results.Select(i=>new ContactPersonViewModel(){/*set your parameters */});

を追加することを忘れないでくださいusing System.Linq;

于 2013-10-04T10:00:54.070 に答える