2

DBに2つのテーブルがあり、そこから選択します。それらの1つには「イベント」(Id、start、end、type)があり、もう1つには「Events_before_after」があり、「Events」からいくつかのイベントにリンクされているイベントを収集します-(Id、EventId、開始、終了、入力)。
また、selectクエリでイベントを並べ替える必要があるイベントのIDのリストもあります。

これは私が持っているものです:

List<int> orderIds = ...

from order in orderIds
join event in events order on order equals event.id
select new DataEvent ()
{
    eventId = event.Id,
    start = event.start,
    end = event.end,
    type = event.type
}).Concat
from eventOther in Events_before_after
select new DataEvent ()
{
    eventId = eventOther.Id,
    start = eventOther.start,
    end = eventOther.end,
    type = eventOther.type
}

セカンドセレクトも注文できますか?eventIdつまり、「イベント」へのリンクを並べ替える方法はありますか?

私が必要なのは:

event1
event2
eventBefore3
event3
eventAfter3

私が持っているものは:

event1
event2
event3
eventBefore3
eventAfter3
4

2 に答える 2

3

あなたはこれを行うことができます:

 //your query
 ...
from eventOther in Events_before_after
select new DataEvent ()
{
    eventId = eventOther.Id,
    start = eventOther.start,
    end = eventOther.end,
    type = eventOther.type
}
into NewEvent
order by NewEvent.eventId
select NewEvent;
于 2012-11-17T09:06:50.163 に答える
2

特定のキーで関連するイベントをグループ化し、それらを順序付けてから、キーの特定の順序に沿ってそれらを投影およびフラット化するという要点がわかった場合は、次のことを試してください。

var orderedEvents = orderIds.Join(
                     //Construct Groups 
                     events.GroupBy( e => e.Id)
                           .GroupJoin( Events_before_after,
                                       g => g.Key,
                                       e => e.EventId,
                                       (gEvent, gEventBA) => new { Key = gEvent.Key,
                                       EventGroup = 
                                       gEvent.Select( e => new DataEvent ()
                                                     {
                                                      eventId = e.Id,
                                                      start = e.start,
                                                      end = e.end,
                                                      type = e.type
                                                     })
                                              .Concat( gEventBA.Select( e => new DataEvent ()
                                                                {
                                                                 eventId = e.Id,
                                                                 start = e.start,
                                                                 end = e.end,
                                                                 type = e.type
                                                                }))
                                              .OrderBy(e => e.eventId)),
                      //Project along keys
                      o => o,
                      anon => anon.Key,
                      (o,anon) => anon.EventGroup)
                      //Flatten groups
                           .SelectMany( g => g);
于 2012-11-18T22:27:45.273 に答える