[英]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.