【发布时间】:2022-01-22 07:42:40
【问题描述】:
我不熟悉在 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()
{
}
}
我还有另一个类,其中包含 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”表可以有多个与条件一致的行,但我只在每个表中获得一行他们。它们被视为单个项目而不是列表。我需要获取满足我在查询中作为列表输入的条件的所有行。
我如何修改我的查询来实现这一点?
【问题讨论】:
-
您只能加入具有共同属性的项目。 ItemTPSalesOrdPMD 具有三个属性,它们是其他项目中没有的字符串:1) SalesDocument 2) BriefcaseNumber 3) MaterialNumber
-
我做到了,在我的查询中,我加入了来自 ItemTPSalesOrdPMD 的 SalesDocument 和来自 TrackingProductoPMD 的 NroPedido
标签: c# sql entity-framework join