Entity Framework に次のイベント モデルを持つ SQL Server Express 2012 があります。
eventPage: ID、名前、説明 .. eventDates: IDEvent、DateStart、DateEnd .. eventTopics: IDEvent IDTopic .. トピック: ID、名前、説明..
したがって、eventDates には eventPage プロパティがあり、eventPage には IEnumerable があり、eventTopic には topic プロパティがあります。
モデルを介してクエリを作成し、その結果を C# のカスタム クラスにマップしたいと考えています。EF によって生成されたモデル クラスを使用したくありません。必要なプロパティのみを持つクラスがいくつかあります。すなわち:
トピック: ID、名前 EventDate: DateStart、DateEnd イベント: ID、名前、トピック、開始、終了
トピックであること トピックと日付のリスト EventDates のリスト
クエリを作成して IQueryable を返すメソッドがあり、そこからリストが必要です。
だから私はそれを得る方法は次のとおりです:
var events=GetEvents(start, end);
var eventsList = (from ev in events
select new {event = ev, eventPage = ev.eventPage,topics=ev.eventTopics)).ToList();
//Mapping
var map = (from ev in eventsList
select new Event(ev.event,ev.eventPage,ev.topics)).ToList();
コンストラクターで、プロパティを設定します。
this.name=eventPage.Name;
this.start=event.Start;
this.end=event.End;
this.topics = topics.Select(t=>t.Topic).ToList();
しかし、これは多数のイベントでは少し遅いです。もっと最適な方法があるかどうか知りたいです。
最初はコンストラクターのみのパラメーターはイベントであり、内部では event.eventPage.Name などを取得しましたが、遅すぎたため、最初に必要なデータを取得し、その後コンストラクターを呼び出しました。