LINQ组合2个查询

3
假设我有三个表:购物车(carts)、篮子(baskets)和鸡蛋(eggs),其中一个篮子可以包含多个鸡蛋,而购物车包含多个篮子。每个篮子都有一个外键映射到购物车,每个鸡蛋都有一个外键映射到篮子。
我需要返回一个包含以下三列的表:
购物车名称 | 购物车中篮子的数量 | 购物车中鸡蛋的数量。
每个表都是EF,我正在使用VB的Linq。
目前,我有两个查询:一个返回购物车名称和篮子数量的列,另一个返回购物车名称和鸡蛋数量的列。如何将这两个结果表合并,以便在一个表中获取结果?
           Dim query1 = (From cart In myEntities.Carts
           Where cart.UserID = TheUserID
           Join baskets In myEntities.Baskets On baskets.CartID Equals cart.CartID
           Select cart.CartName, cart.baskets.Count()).Distinct()

           Dim query2 = (From cart In myEntities.Carts
           Where cart.UserID = TheUserID
           Join baskets In myEntities.Baskets On baskets.CartID Equals cart.CartID
           Select cart.CartName, baskets.Eggs.Count()).Distinct()

感谢您的帮助。
2个回答

2
以下查询可得到所需结果:
from cart in Carts _
select cart.CartName, BasketsInCart = cart.Baskets.Count(), EggsInCart = cart.Baskets.SelectMany(Function(basket)basket.Eggs).Count()

由于cart.Baskets是一个Ienumerable(of Baskets)类型,因此可以使用SelectMany运算符来获取所有篮子中的所有鸡蛋。


我使用了你的方法修改了查询,加入了EggCount、cartname和EggCount:应该有三列,第一列和第三列结果相同。但是,第一列给出每个购物车的鸡蛋数量,第二列包含相同的购物车三次,然后是两个空的cartnames,第三列显示了5个计数,前3个计数显示我无法根据原始数据重现的总和,以及2个零。共有5辆购物车,其中3辆装有鸡蛋,另外2辆没有。啊啊啊啊啊,这真是令人抓狂! - user471807
我不太明白第一列和第三列之间的区别,以及为什么你需要这个设置?你最终想要达到什么目的? - jaraics

0
如果您已经定义了关系,您可以直接在嵌套实体上使用Count方法。
var cartCounts = from c in myEntities.Carts
                 select new 
                 { 
                     c.CartName, 
                     BasketCount = c.Baskets.Count(),
                     EggCount = c.Baskets.Eggs.Count() 
                 };

它基本上告诉我Eggs不是成员。你能看出为什么吗? - user471807
你在篮子和鸡蛋之间建立了关系吗?你发布的两个查询都有效吗? - Dustin Laine
c.Baskets.Eggs.Count() - 这里的 Baskets 是一个集合。你不能使用 Baskets.Eggs - Yakimych

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接