繁体   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