当前位置: 首页 > 编程语言 > C#

Linq-由多个表共享组成

时间:2023-04-11 01:23:15 C#

Linq-由多个表组成如何使用LinqtoSql对以下2个表进行分组。订单表:CustomerID|姓名|日期1|订单1|2010-01-012|订单2|2010-01-012|订单3|2010-04-01调用表:CustomerID|姓名|日期1|-013|通话2|2010-06-012|电话3|2010-05-01我想按日期对两个表进行分组,结果:Date|订单|来电2010-01-01|2|12010-04-01|1|02010-05-01|0|12010-06-01|0|1我知道如何合并一个表,从oinOrdersgroupobyo.Date.Date到ogselectnew{Date=og.Key,Orders=og.Count()};我如何将两者结合起来?谢谢!由于两个表似乎具有相似的结构,我建议将两者投影为等效形式,然后对两个集合的串联进行分组。varorders=fromoinOrdersselectnew{IsOrder=true,o.Date};varcalls=fromcinCallsselectnew{IsOrder=false,c.Date};varresult=fromxinorders.Concat(calls)groupxbyx.Dateintoogselectnew{Date=og.Key,Orders=og.Count(o=>o.IsOrder),Calls=og.Count(c=>!c.IsTrue)};由于Linq2Sql的惰性,这实际上可能会减少为单个查询。为了性能,我将确保这不是来自地狱的查询。您可以使用Union方法:varresult=(fromcinCallsgroupcbyc.Dateintocgselectnew{Date=cg.Key,Calls=cg.Count(),Orders=0}).Union(fromo在Ordersgroupobyo.Dateintoogselectnew{Date=og.Key,Calls=0,Orders=og.Count()}).GroupBy(x=>x.Date).Select(g=>new{Date=g.Key,Calls=g.Max(r=>r.Calls),Orders=g.Max(r=>r.Orders)});foreach(varrowinresult){Trace.WriteLine(row);}这个和你要写的SQL很像(两张表的union,然后一个外层查询,把结果合并成一行)以上是C#学习教程:Linq-composedofmultipletables很有用,需要了解有关C#学习教程的更多信息。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: