LINQ to SQL:来自两个不相关表的数据,按日期排序

时间:2009-12-21 14:36:21

标签: c# asp.net linq linq-to-sql join

我有两张表tblActionLogtblLoginLog

这是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查询)。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分: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对象的实际名称,以及列的实际名称来显示发生的事情(因为表格设计中没有列出)。

答案 1 :(得分: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。此外,这是完全未经测试的 - 直接输入答案编辑器,我没有检查联盟方法的签名,所以你可能需要调整。