2009-12-21 52 views
0

我有兩個表tblActionLogtblLoginLogLINQ to SQL:來自兩個不相關表的數據,日期排序

這是tblActionLog

tblActionLog 
------------ 
ID (int) 
Happened (DateTime) 
...etc. 

這是tblLoginLog

tblLoginLog 
----------- 
ID (int) 
LoginDate (DateTime) 
...etc. 

現在我想和信息GridView從這兩個表中海誓山盟交錯,使他們獨立日的信息是排序,例如:

LOG OF STUFF 
------------------------------- 
DATE  | WHAT  
2009-09-09 | Anderson logged in. 
2009-09-08 | Smith made an action. 
2009-09-08 | Smith logged in. 
2009-09-06 | Anna made an action. 
2009-09-04 | Smith made an action. 

我希望這已經足夠清楚。我想要在單個LINQ查詢中獲得所有這些信息(不一定是一個SQL查詢)。任何幫助讚賞。

回答

0

您可能想要使用Select()和Union()來整理結果。

var query = context.Logins.Where(l => l.UserID == userID) 
          .Select(l => new { Date = l.Date, What = "logged in" }) 
        .Union(context.Actions.Where(a => a.UserID == userID) 
              .Select(a => new { Date = a.Date, What = a.Action })) 
        .OrderBy(r => r.Date); 

注意:您可能需要兌現每一個子查詢(使用ToList()或AsEnumerable()),但我認爲應該LINQ2SQL能夠直接構建UNION。此外,這是完全未經測試 - 直接輸入答案編輯器,我沒有檢查聯盟方法的簽名,因此您可能需要進行調整。

+0

你可以給我一個使用我的表的例子,如問題所示?謝謝。 – 2009-12-21 14:42:00

+0

哪個更好,Union還是Concat? – 2009-12-21 14:48:21

+0

其實我認爲翻譯的唯一區別在於它是否做了UNION或UNION ALL。在這種情況下,它相當於同樣的事情,但如果你可以容忍重複(或者沒有 - 這可能是這種情況),Concat可能會更快一些。 – tvanfosson 2009-12-21 15:29:01

1

這裏是做的另一種方式....

(from a in dataContext.tblActionLog 
select new 
{ 
    Date = a.Date, 
    What = a.WhatHappened 
}).Union 
     (from l in dataContext.tblLoginLog 
     select new 
     { 
      Date = l.Date, 
      What = l.WhatHappened 
     }).OrderByDescending(c => c.Date); 

當然,你會替換你的DataContext對象的實際名稱和列的實際名稱以示發生了什麼(因爲未列在您的餐桌設計中)。