2016-04-12 6 views
1

私は、だから私は、「車」、「エンジン」と「燃料タンク」の実体を持つ単純なデータモデルにEntity Frameworkのオブジェクトグラフから特定のプロパティのみを選択する方法はありますか。

car 
- make 
- model 
- year 
- colour 
- engine 
    - model 
    - no. cylinders 
    - size 
    - etc 
- fuel tank 
    - model 
    - capacity 
    - fuel type 
    - etc 
- etc 

を持っています。それぞれが多くのプロパティを持っています。

私はすべての100台の車のリストが必要ですが、次の選択されたプロパティーを表示したいだけです:car.make, car.model, car.year, car.engine, car.size, car.fueltype

私は確かに.includeを使ってオブジェクトグラフのサブエンティティを取り戻すことができますが、これは多くのプロパティがあるため大ヒットです。

私の質問は、これを行うためのきちんとした方法があるかどうかです。実際にはEntity Framework(理想的にはEF7/Core)を使用していますか?

あなたは[私は匿名クラスに選択を使用するhttps://colinmackay.scot/2011/07/31/getting-just-the-columns-you-want-from-entity-framework/を参照してくださいでしたが、これは複数含まれて以内に仕事ができるか見ることができませんでした]

感謝。

答えて

2

Includeを使用する必要があるのは、完全なエンティティを元に戻したい場合です。には投影を行う必要がありません。匿名で、または定義されたモデルクラスを使用して、投影を行うことができます。次のコードは、あなたが始める必要があります。

// Define model... 
public class CarModel 
{ 
    public string Make { get; set; } 
    public string Model { get; set; } 
    public int EngineCC { get; set; } 
} 

// Project to list of models 
var cars = context.Cars.Select(c => new CarModel 
{ 
    Make = c.Make, 
    Model = c.Model, 
    EngineCC = c.Engine.CC 
}).ToList(); 

をあなたはこのようなAutoMapperとしてマッピングライブラリを使用して、これは非常に簡単にすることができます。 AutoMapperを使用して、これは次のようになります。この例では

// (at start of project) 
Mapper.Initialize(c => { 
    c.CreateMap<Car, CarModel>(); 
}); 

// Projection... 
var cars = context.Cars.ProjectTo<CarModel>().ToList(); 

、EngineCCが自動的Engine.CCからマップされましたが、あなたは手動だけで自動的に動作しない任意のマッピングを指定することができます。 AutoMapperはLinq投影を作成し、必要なプロパティのみを返します。

+0

リチャード - それは私が必要とするものです - 本当に感謝します!私は。に固執しています。もちろん、私はそれらをdoh必要はありません! AutoMapperを使用してDTOにマップすることは可能です。 –

関連する問題