繁体   English   中英

选择一个表并使用实体框架在另一表中求和

[英]select one table and sum row in another table with entity framework

我有两个表是产品和订单,我要选择所有产品,并以计数的产品。 例:

Product
ID   |   Name   | ....
P001  ProductA    ....
P002  ProductB    ....
P003  ProductC    ....
P004  ProductD    ....

Order
ID   | CustomerID | ...
O001   C001
O002   C002

OrderDetails
ID   | OrderID | ProductID | Quantity | ....
1      O001      P001        2          ....
2      O001      P002        1          ....
3      O002      P002        4          ....
4      O002      P004        1          ....

Result is:
ID   |   Name   | Count | ....
P001  ProductA    2       ....
P002  ProductB    5       ....
P003  ProductC    0       ....
P004  ProductD    1       ....

我在下面尝试代码但是错了

db.tblProducts
  .Join(db.tblOrderDetails, p => p.ProductID, o => o.ProductID, (p, o) => new { Product = p, OrderDetails = o })
  .Select(x => new { x.Product , x.OrderDetails  })
  .ToList();

解析数据以查看{ Product = MvcWebProject.Entities.tblProduct, OrderDetails = MvcWebProject.Entities.tblOrderDetails } ,但是我无法选择值。

foreach (var item in ViewBag.products)
{
    <p>@item.Product</p> //'object' does not contain a definition for 'Product'
}

未经测试,希望这可以帮助您入门:

from product in db.tblProducts
let summedCount=(from orderDetail in product.OrderDetails
                 select orderDetail.Quantity).Sum()
select new {Id=product.Id,Name=product.Name,Count=summedCount}

我创建包含tblProduct的新模型并计数

public class Product
{
    public Product()
    {
        Prod = new tblProduct();
    }
    public tblProduct Prod { get; set; }
    public Nullable<int> Count { get; set; }
}

控制器中的代码

var products = db.tblProducts
                     .Select(x => new Product { 
                             Prod = x, 
                             Count = db.tblOrderDetails
                                       .Where(z => z.ProductID == x.ProductID)
                                       .Sum(z => z.Quantity) })
                     .ToList();
return View(products)

并鉴于

foreach (var item in Model)
{
    <p>@item.Prod.MSP</p>
    <p>@{int? c = 0;if (item.Count == null) { c = 0; } else { c = item.Count; }}@c</p>
}

尝试这个

select Product.ID, Product.Name, SUM(OrderDetails.Quantity) as [Count] from Product inner join
OrderDetails on Product.ID=OrderDetails.Quantity group by Product.ID;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM