繁体   English   中英

将SQL查询转换为linq asp.net

[英]Convert SQL query to linq asp.net

SELECT 
    O.OrderID, p.ProductName, op.Quantity, 
    m.MemberName, (op.Price * op.Quantity) as Total Price
FROM 
    o order, op order_product, m member, p product
WHERE 
    o.orderID = op.OrderID
    AND op.ProductID = p.ProductID
    AND o.MemberID = m.MemberID
    AND o.OrderDateTime = @selectDate;
GROUP BY 
    o.OrderID

我是Linq的新手。 有谁知道如何将此SQL语句转换为linq?

我知道此查询效率不高,但我仍在学习。 我想生成可以将订单ID分组的每日交易报告。

我正在尽力自己编写LinQ,但是我如何结合4表?

        var query = from o in db.order_product
                    where o.order.OrderDateTime == System.DateTime.Now
                    group o by o.order
                    into OrderList
                    select new {
                        OrderID = OrderList.Key.OrderID,
                        ProductName = OrderList.Key.order_product
                    };

我需要获取订单ID(在订单表中),产品名称(在产品表中),数量(在order_product表中)和成员名称(在成员表中)。

有一些可用的工具,例如LinqPad,SqlToLinq。 对于问题,请尝试以下类似的方法:

    var retResult = from o in dbContext.order 
                    inner join op in dbContext.order_product
                    on o.orderID equals op.OrderID

                    inner join p in dbContext.product
                    on op.ProductID equals p.ProductID

                    inner join m in dbContext.member
                    on o.MemberID equals m.MemberID

                    group o by o.OrderId into og
                    where o.OrderDateTime = @selectDate

                    select new { 
                                    OrderID = O.OrderID, 
                                    ProductName = p.ProductName, 
                                    Quantity = op.Quantity, 
                                    MemberName = m.MemberName, 
                                    TotalPrice = (op.Price * op.Quantity) 
                               }

联接表非常简单。 在您的情况下,您需要内部联接,这是最简单的一种。 只需from带有内部连接条件的子句追加

var query = from op in db.order_product.Where(o=>o.order.OrderDateTime == System.DateTime.Now)
            from o in db.order.Where(o=>o.Id == op.OrderId)
            from p in db.product.Where(p=>p.Id == op.ProductId)
            from m in db.member.Where(m=>m.Id == o.MemberId)
            group op by op.order
                into OrderList
                select new {
                    OrderID = OrderList.Key.OrderID,
                    ProductName = OrderList.Key.order_product.Name,
                    Quantity = OrderList.Key.order_product.Quantity,
                    MemberName = OrderList.Key.Member.Name
                };

希望能有所帮助,亚历山德罗

暂无
暂无

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

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