【问题标题】:LINQ to SQL: Data from two unrelated tables, sorting on dateLINQ to SQL:来自两个不相关表的数据,按日期排序
【发布时间】:2009-12-21 14:36:20
【问题描述】:

我有两张桌子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 查询)中获取所有这些信息。任何帮助表示赞赏。

【问题讨论】:

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


    【解决方案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 对象的实际名称和列的实际名称来显示发生了什么(因为您的表格设计中没有列出)。

    【讨论】:

      【解决方案2】:

      您可能希望使用 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 方法的签名,因此您可能需要调整。

      【讨论】:

      • 您能否给我一个使用我的表格的示例,如问题所示?谢谢。
      • Union 还是 Concat 哪个更好?
      • 其实我觉得翻译的唯一区别就是是UNION还是UNION ALL。在这种情况下,它相当于同样的事情,但如果你可以容忍重复(或者如果没有重复——这可能是这里的情况),Concat 可能会快一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多