簡體   English   中英

C# - 獲取查詢連接中滿足條件的行列表

[英]C# - Get list of rows that satisfy condition in query join

我是在 C# 代碼中使用查詢的新手,所以我在這里需要一點幫助。

我的數據庫中有這兩個表:

public class ItemTPRetencionPMD
    {

        public DateTime? FechaAprobacion { get; set; }
        public int IdPedido { get; set; }
        public int NroPedido { get; set; }
        public string Codigo { get; set; }
        public string CodigoCompania { get; set; }
        public string Retencion { get; set; }

        public ItemTPRetencionPMD()
        {
        }

    }

 public class ItemTPSalesOrdPMD
    {

        public string SalesDocument { get; set; }
        public string BriefcaseNumber { get; set; }
        public string MaterialNumber { get; set; }
       
        public ItemTPSalesOrdPMD()
        {
        }
    }

我還有另一個 class 包含 ItemTPRetencionPMD 列表和 ItemTPSalesOrdPMD 列表:

 public class TrackingProductoPMD
      {
            public int NroPedidoBrief { get; set; }
            public long NroPedido { get; set; }
    
            [NotMapped]
            public List<ItemTPRetencionPMD> Retenciones { get; set; }
    
            [NotMapped]
            public List<ItemTPSalesOrdPMD> SalesOrds { get; set; }
    
            public TrackingProductoPMD()
            {
                SalesOrds = new List<ItemTPSalesOrdPMD>();
                Retenciones = new List<ItemTPRetencionPMD>();
            }
    
     }

現在,我想做一個返回“TrackingProductoPMD”表行的查詢,我還需要它包括“Retenciones”和“SalesOrds”列表。 此查詢已離開外部連接,因此即使任何列表最終為空,我仍然可以獲得“TrackingProductoPMD”項:

 var query = from prod in dbBrief.TrackingProductoPMD
                        join r in db.ItemTPRetencionPMD on prod.NroPedidoBrief equals r.NroPedido into itemConRetenciones
                        from retenciones in itemConRetenciones.DefaultIfEmpty()
                        join so in db.ItemTPSalesOrdPMD on prod.NroPedido equals Convert.ToInt64(so.SalesDocument) into itemConSalesOrds
                        from salesOrds in itemConSalesOrds.DefaultIfEmpty()
                        select new { prod, retenciones, salesOrds };

這些是我的查詢中的條件:

TrackingProductoPMD.NroPedido == ItemTPSalesOrd.SalesDocument
TrackingProductoPMD.NroPedidoBrief == ItemTPRetencion.NroPedido

這是我遇到的問題: “ItemTPSalesOrdPMD”和“ItemTPRetencionPMD”表可以有多個與條件一致的行,但我只在每個表中獲得一行。 它們被視為單個項目而不是列表。 我需要獲取滿足我在查詢中作為列表輸入的條件的所有行。

我怎樣才能修改我的查詢來完成呢?

由於您正在查詢具有多對多關系的表,因此您必須編寫單獨的查詢,如下所示。 然后返回一個 model 以及兩者的結果。

var prodRetencionesQuery = from prod in dbBrief.TrackingProductoPMD 
    join r in db.ItemTPRetencionPMD on prod.NroPedidoBrief equals r.NroPedido into itemConRetenciones
    from retenciones in itemConRetenciones.DefaultIfEmpty()
    select new { prod, retenciones };

var prodSalesOrdsQuery = from prod in dbBrief.TrackingProductoPMD
                        join so in db.ItemTPSalesOrdPMD on prod.NroPedido equals Convert.ToInt64(so.SalesDocument) into itemConSalesOrds
                        from salesOrds in itemConSalesOrds.DefaultIfEmpty()
                        select new { prod, salesOrds };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM