最初にいくつかの背景.. Telerik MVCグリッドを使用してデータを表示しています。グリッドは、IEnumerableが自分のページのグリッドモデルクラスに渡されることを前提としています。AutoMapperを使用してLINQクエリ結果をViewModelオブジェクトにマップする
このデータをJSONとしてajax経由で渡すときに循環参照を避けるには、モデルオブジェクトを表示するためのEF linq querys ... AutoMapperは私の選択方法ですが、AutoMapperを使用する唯一の解決策は、パフォーマンスが非常に悪いということです。
ものを作るためにautomapperを使用している間、私は、グリッドによって呼び出された私のアクションメソッドへの私の見解モデルタイプのIEnumerableをを返すリポジトリ..
public IEnumerable<ResultViewModel> Search()
{
var person = _context.Persons;
//this works and is the best performance wise but could be made simpler with automapper
var result = person.Select(x => new ResultViewModel
{
FirstName = x.firstName,
LastName = x.lastName,
///etc...
});
//THIS IS SLOW but works
//var result = Mapper.Map<IEnumerable<Person>, IEnumerable<ResultViewModel>>(person);
//this does not work and errors at runtime
//var result = person.Select(x => Mapper.Map<Person, ResultViewModel>(x));
return result;
}
自分のパフォーマンスを維持する方法上の任意のアイデアを持っていますより簡単に。私はautomapperを使用している遅いバージョンがperson
コレクションが列挙されていると仮定しています...その後、telerikグリッドによって後で解析されます。
'person.Select(x => Mapper.Map(x))'のエラーはどうですか? –
smartcaveman
@smartcavemanエラー:LINQ to Entitiesがメソッド....を認識せず、このメソッドをストア式に変換できません – stephen776
これは 'IQueryable'が評価されていないことを意味します。 jfarの答えはうまくいくはずです – smartcaveman