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