[英]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.