【问题标题】:LINQ select with in a selectLINQ 在选择中选择
【发布时间】:2021-07-12 04:19:37
【问题描述】:

我有一个 SQL 查询,我试图在 LINQ 中查询它,但我没有 获得正确的子查询结果
SQL查询:

   SELECT  
  (1) query_no, 
 (view_supplier_ledger_ap.co_code) ,
 (view_knockoff_ap.year_src) ,
 (view_knockoff_ap.period_src) ,
 (view_knockoff_ap.vchrtype_src) ,
 (view_knockoff_ap. Amount),
 (SELECT Sum(view_knockoff_ap_b. Amount)

 FROM view_knockoff_ap 
 view_knockoff_ap_b  
 WHERE  
 ( view_knockoff_ap.year_src = view_knockoff_ap_b.year_src ) and  
 (view_knockoff_ap.period_src = view_knockoff_ap_b.period_src)
 payment_amount_sum
FROM view_supplier_ledger_ap,   
ap_custsupplier,
view_knockoff_ap,
WHERE
  (view_supplier_ledger_ap.doc_type <> 'ACP Bill') 
   and(view_supplier_ledger_ap.co_code  = ap_custsupplier.Cst_CO_CODE) 

现在,这是我遇到的问题。当我在选择中进行选择时,每个对象上返回的 AMOUNT_SUM 字段的值不正确:

  MY LINQ:

 var Query1 = (from LedAP in context.VIEW_SUPPLIER_LEDGER_AP
                 join cs in context.AP_CUSTSUPPLIER
                  join konckAP in context.VIEW_KNOCKOFF_AP
                  join viewallow in context.view_allowed_period_user
                         select new
                          {
                              LedAP.CO_CODE,
                              LedAP.SUP_CODE,
                              konckAP.AMOUNT,

                              AMOUNT_SUM = context.VIEW_KNOCKOFF_AP
                              .Where(x => (x.YEAR_SRC == x.YEAR_SRC) && 
                              (x.PERIOD_SRC == x.PERIOD_SRC))
                               .GroupBy(x => x.AMOUNT)
                               .Select(a => a.Sum(b => 
                                b.AMOUNT)).FirstOrDefault()
                                });
                     

【问题讨论】:

  • 如果你的 SQL 比 LINQ 更好,那为什么不直接使用 sql 来处理复杂的查询呢?没有实体框架警察会来逮捕你。

标签: c# linq select


【解决方案1】:

您按数量分组,然后使用 Sum 乘以该项目出现的次数。假设一个组是 10.00 美元,组中有五个项目。那么总和是 50.00 美元。如果这是您想要的,使用 a.Count() * a.Key 会更容易理解

无论如何,我会这样做:

var Query1 = (from LedAP in context.VIEW_SUPPLIER_LEDGER_AP
                 join cs in context.AP_CUSTSUPPLIER
                  join konckAP in context.VIEW_KNOCKOFF_AP.Where(x => (x.YEAR_SRC == x.YEAR_SRC) && 
                              (x.PERIOD_SRC == x.PERIOD_SRC))
                  join viewallow in context.view_allowed_period_user
                         select new
                          {
                              LedAP.CO_CODE,
                              LedAP.SUP_CODE,
                              konckAP.AMOUNT
                           }).GroupBy(x => x.Amount)
                           .Select(a => new {a.CO_CODE,
                              a.SUP_CODE,a.Key * a.Count()});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2010-10-12
    相关资源
    最近更新 更多