假设我有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()
感谢您的帮助。
答案 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()
};