簡體   English   中英

Linq從兩個表中選擇按列表順序

[英]Linq select from two tables order by list

我想從數據庫中選擇兩個表。 在其中一個“事件”中,我有事件(ID,開始,結束,類型),在另一個中,我有“ Events_before_after”中,我在那里收集與“事件”中的某些事件相關聯的事件-(ID,EventId,開始,結束,輸入)。
我還有一個事件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

你可以這樣做:

 //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;

如果我想知道的是,您想將給定鍵上的相關事件歸為一組,對其進行排序,然后按照給定鍵的順序對它們進行投影和展平...。如果要這樣做,請嘗試以下操作:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM