Linq - 由多个表组成

dan*_*ano 7 c# linq asp.net linq-to-sql

使用Linq to Sql如何对以下2个表进行分组.

订单表:

CustomerID | Name   |Date            
1          | order1 | 2010-01-01  
2          | order2 | 2010-01-01
2          | order3 | 2010-04-01
Run Code Online (Sandbox Code Playgroud)

电话表:

CustomerID | Name   |Date            
1          | call1 | 2010-01-01  
3          | call2 | 2010-06-01
2          | call3 | 2010-05-01
Run Code Online (Sandbox Code Playgroud)

我想按日期对两个表进行分组,结果:

Date       | Orders | Calls
2010-01-01 | 2      | 1
2010-04-01 | 1      | 0
2010-05-01 | 0      | 1
2010-06-01 | 0      | 1
Run Code Online (Sandbox Code Playgroud)

我知道如何组合一张桌子,

from o in Orders        
group o by o.Date.Date into og
select new {Date = og.Key,Orders= og.Count()};
Run Code Online (Sandbox Code Playgroud)

我怎么组合两个?谢谢!

Joh*_*lph 9

由于两个表似乎都具有相似的结构,我建议将两者都投影到等效的形式中,然后对这两个表的串联进行分组.

var orders = from o in Orders 
            select new { IsOrder = true, o.Date };
var calls = from c in Calls 
            select new { IsOrder = false, c.Date };

var result = from x in orders.Concat(calls)        
            group x by x.Date into og
            select new {Date = og.Key, Orders= og.Count(o=>o.IsOrder), Calls = og.Count(c=>!c.IsTrue)};
Run Code Online (Sandbox Code Playgroud)

由于Linq2Sql的惰性,这可能实际上减少为单个查询.为了表现,我会确保这不是来自地狱的问题.