linq结合2个查询

时间:2010-10-11 05:18:03

标签: vb.net linq

假设我有3张桌子:推车,篮子和鸡蛋,其中一个篮子可以包含许多鸡蛋,推车里有很多篮子。每个篮子都有一个映射到购物车的外键,每个鸡蛋都有一个映射到篮子的外键。

我需要返回一个包含这3列的表:

购物车名称|购物车中的篮子数量|购物车中的鸡蛋数量。

每个表都是EF,我正在使用带有VB的linq。

到目前为止,我有2个查询:一个返回Cart Name和Basket of Count列,另一个返回Cart Name和Eggs of Count。 如何合并这两个结果表,以便在一个表中得到结果?

           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 个答案:

答案 0 :(得分: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运算符可用于从所有篮子中获取所有鸡蛋。

答案 1 :(得分:0)

如果您已定义关系,则可以在嵌套实体上使用Count方法。

var cartCounts = from c in myEntities.Carts
                 select new 
                 { 
                     c.CartName, 
                     BasketCount = c.Baskets.Count(),
                     EggCount = c.Baskets.Eggs.Count() 
                 };