繁体   English   中英

SQL到Linq实体

[英]SQL to Linq-Entities

请帮助我在LINQ-Enitites中转换此SQL查询

select e.RowMeterialName,f.RowUnitName,*,isnull((b.Quantity - (Select SUM(a.Quantity) from PurchaseDetail a
                    join PurchaseMaster c on a.PurchaseId=c.PurchaseId
                    where a.RawMetId=b.RawMetrialId and c.PurchaseOrderId=b.PurchaseOrderId)),b.Quantity) as Remain 
                    from PurchaseOrderDetail b
                    join RawMeterialMaster e on b.RawMetrialId=e.RawMetId
                    join RawUnitMaster f on e.RawUnitId=f.RowUnitId
                    where b.PurchaseOrderId=@PurchaseOrderId

请帮我。

这是一个远景,但是您可以尝试:

PurchaseDetail
.Join
(
    PurchaseMaster,
    x=>x.PurchaseId,
    x=>x.PurchaseId,
    (detail,master)=>new {detail,master}
)
.Join
(
    PurchaseOrderMaster,
    x=>x.PurchaseOrderId,
    x=>x.PurchaseOrderId,
    (joined,ordermaster)=>new{detail=joined.detail,master=joined.master,ordermaster}
)
.Select
(
    x=>
    new{detail.Quantity,detail.RawMetId}
)
.GroupBy(x=>x.RawMetId)
.Select
(
    x=>
    new
    {
        RawMetId=x.Key,
        Quantity=x.Sum(z=>z.Quantity)
    }
)
.Join
(
    PurchaseOrderDetail,
    x=>x.RawMetrialId,
    x=>x.RawMetId,
    (subquery,orderdetail)=>new{subquery,Remain=subquery.Quantity - orderdetail.Quantity}
)

谢谢大家,但我在此查询中找到了结果

from b in db.PurchaseOrderDetails
                        select new
                        {
                            b.RawMeterialMaster.RowMeterialName,
                            PurOrderDetailId = b.PurOrderDetailId,
                            PurchaseOrderId = b.PurchaseOrderId,
                            RawMetrialId = b.RawMetrialId,
                            DueOn = b.DueOn,
                            Quantity = b.Quantity,
                            ItemRate = b.ItemRate,
                            MetrialUnitsId = b.MetrialUnitsId,
                            Remark = b.Remark,
                            RowUnitName = b.RawMeterialMaster.RawUnitMaster.RowUnitName,
                            ReOrderQuantity = (decimal?)b.RawMeterialMaster.ReOrderQuantity,
                            Remain = ((System.Decimal?)b.Quantity -
                              (from a in db.PurchaseDetails
                               where
                                a.RawMetId == b.RawMetrialId &&
                                a.PurchaseMaster.PurchaseOrderId == b.PurchaseOrderId
                               select new
                               {
                                   a.Quantity
                               }).Sum(p => p.Quantity) ?? (System.Decimal?)b.Quantity)
                        };

暂无
暂无

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

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