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

我有两个表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查询)。 任何帮助赞赏。

您可能希望使用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。 此外,这是完全未经测试的 – 直接输入答案编辑器,我没有检查Union方法的签名,因此您可能需要调整。

这是另一种做法….

 (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对象的实际名称,以及列的实际名称以显示发生的情况(因为您的表设计中未列出该名称)。