我有三组数据代表一个计数值,按国家/地区代码分组。
select distinct m.CountryCode, count(m.MetricId) as 'Impressions'
from Metrics m
inner join impressions i on m.MetricId = i.MetricId
where ...
group by m.CountryCode
select distinct m.CountryCode, count(m.MetricId) as 'Conversions'
from Metrics m
inner join Conversions c on m.MetricId = c.MetricId
where ...
group by m.CountryCode
..还有第三个与一个名为" Leads"
的桌子相连的人所以这些都给了我一组不同的国家代码和相应的数字。
CountryCode Impressions
AU 25
DE 34
US 264
CountryCode Conversions
AU 11
US 140
这样的事情。所以我的目标是将所有三个记录集合并为一个如下所示:
CountryCode Impressions Conversions Leads
US 264 140 98
我想学习如何使用LINQ执行此操作,而无需执行三个查询。这是一个更直接的方法,但我已经做了太长时间,我的眼睛没有看到它。非常感谢在正确的方向上轻推,谢谢
答案 0 :(得分:2)
var qry1 = (from m in Db.Metrics
join i in Db.Impressions on m.MetricId equals i.MetricId
//where
group m by m.CountryCode into grp
select new
{
CountryCode = grp.Key,
Impressions = grp.Count()
});
var qry2 = (from m in Db.Metrics
join c in Db.Conversions on m.MetricId equals c.MetricId
//where
group m by m.CountryCode into grp
select new
{
CountryCode = grp.Key,
Conversions = grp.Count()
});
var result = (from x in qry1
join y in qry2 on x.CountryCode equals y.CountryCode
select new
{
CountryCode = x.CountryCode,
Impressions = x.Impressions,
Conversions = y.Conversions
});
var lst = result.ToList();
前两个查询是懒惰的,它们还没有执行。结果变量只是将它们连接在一起,最后一部分执行最终查询并实现对象 在单独的查询中拆分这些可以帮助保持简单。