用户登录
用户注册

分享至

Linq - 按多个表分组

  • 作者: 只进入你的身体-不进入你的生活
  • 来源: 51数据库
  • 2022-12-15

问题描述

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

Using Linq to Sql how do i group the following 2 tables.

订单表:

CustomerID | Name   |Date            
1          | order1 | 2010-01-01  
2          | order2 | 2010-01-01
2          | order3 | 2010-04-01

调用表:

CustomerID | Name   |Date            
1          | call1 | 2010-01-01  
3          | call2 | 2010-06-01
2          | call3 | 2010-05-01

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

I want to group the two tables by date , Result:

Date       | Orders | Calls
2010-01-01 | 2      | 1
2010-04-01 | 1      | 0
2010-05-01 | 0      | 1
2010-06-01 | 0      | 1

我知道如何对单个表进行分组,

i know how to group a single table ,

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

我如何将两者分组?谢谢!

推荐答案

由于两个表似乎具有相似的结构,我建议将它们投影为等效的形式,然后对这两个集合的串联进行分组.

Since both tables seem to have a similar structure I'd recommend projecting both into an equivalent form and then group on the concatenation of those two sets.

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)};

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

Due to the lazy nature of Linq2Sql this might actually be reduced to a single query. In the interest of performance I would make sure this is not a query from hell.

软件
前端设计
程序设计
Java相关