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