C# GroupJoin无需从关联列表中选择内容
所以我有两个类,我正试图将它们组合成一个ViewModel,以便在应用程序中使用。我试图找到lambda语法来执行两个对象之间的左连接(实际传递,DeliveryHdr)。在某些情况下,DeliveryHdr是按计划进行的计划交付,实际交付是在交付后收集的详细信息。我正在使用提供的方法(CovertToViewModel)组合这两个对象并返回一个ViewModels列表,它的功能与我希望的一样,但我认为必须有一种更简单的方法?如何执行1对1的左联接,而不必像下面那样在联接列表上执行SelectC# GroupJoin无需从关联列表中选择内容,c#,.net,asp.net-mvc,lambda,telerik,C#,.net,Asp.net Mvc,Lambda,Telerik,所以我有两个类,我正试图将它们组合成一个ViewModel,以便在应用程序中使用。我试图找到lambda语法来执行两个对象之间的左连接(实际传递,DeliveryHdr)。在某些情况下,DeliveryHdr是按计划进行的计划交付,实际交付是在交付后收集的详细信息。我正在使用提供的方法(CovertToViewModel)组合这两个对象并返回一个ViewModels列表,它的功能与我希望的一样,但我认为必须有一种更简单的方法?如何执行1对1的左联接,而不必像下面那样在联接列表上执行Select
public partial class ActualDelivery
{
public int ActualDeliveryId { get; set; }
public int DeliveryId { get; set; }
public string DockDoor { get; set; }
public string ArrivalComments { get; set; }
public string SetTemp { get; set; }
public string Unloader { get; set; }
public DateTime? UnloadStart { get; set; }
public DateTime? UnloadEnd { get; set; }
public int? ActualAmbientFull { get; set; }
public int? ActualAmbientMixed { get; set; }
public int? ActualReefer { get; set; }
public int? ActualCageVault { get; set; }
public int? ActualBlc { get; set; }
public int? ActualTotalPallets { get; set; }
public int? ActualTotalLpns { get; set; }
public DateTime? CreatedDttm { get; set; }
public string CreatedUser { get; set; }
public DateTime? UpdatedDttm { get; set; }
public string UpdatedUser { get; set; }
}
public List CovertToViewModel(列表交付、列表实际值)
{
返回deliveries.Where(e=>e.MarkAsDeleted==false).GroupJoin(实际值,d=>d.DeliveryId,a=>a.DeliveryId,(d,a)=>
新的ActualDeliveriesViewModel()
{
DeliveryId=d.DeliveryId,
ActualDeliveryId=a.Select(i=>i.ActualDeliveryId).FirstOrDefault(),
CompositeId=d.DeliveryId+“”+a.Select(i=>i.ActualDeliveryId).FirstOrDefault(),
LoadDate=d.LoadDate,
ScheduledTime=d.ScheduledTime,
实际时间=d.到达时间,
LoadNumber=d.LoadNumber,
供应商名称=d.供应商名称,
承运人=d.承运人,
IsConfirmed=d.IsConfirmed,
IsBackHaul=d.IsBackHaul,
IsCancelled=d.IsCancelled,
DockDoor=a.Select(i=>i.DockDoor).FirstOrDefault(),
ArrivalComments=a.Select(i=>i.ArrivalComments).FirstOrDefault(),
settep=a.Select(i=>i.settep).FirstOrDefault(),
卸载程序=a.Select(i=>i.disloader).FirstOrDefault(),
UnloadStart=a.Select(i=>i.UnloadStart).FirstOrDefault(),
UnloadEnd=a.Select(i=>i.UnloadEnd).FirstOrDefault(),
ActualBanientFull=a.Select(i=>i.ActualBanientFull).FirstOrDefault(),
ActualBanientMixed=a.Select(i=>i.ActualBanientMixed).FirstOrDefault(),
ActualBlc=a.Select(i=>i.ActualBlc).FirstOrDefault(),
ActualCageVault=a.Select(i=>i.ActualCageVault).FirstOrDefault(),
ActualReefer=a.Select(i=>i.ActualReefer).FirstOrDefault(),
ActualTotalPallets=(a.Select(i=>i.ActualBanientFull).FirstOrDefault()+a.Select(i=>i.ActualBanientMixed).FirstOrDefault()+a.Select(i=>i.ActualBandlec.FirstOrDefault()+a.Select(i=>i.ActualLeafer.FirstOrDefault())??0
}).ToList();
}
Why not(从交付中的d开始)。其中(e=>e.MarkAsDeleted==false)在d上的实际值中加入a。交付ID等于a。交付ID选择新的实际值交付视图模型(){……})。ToList();
public partial class DeliveryHdr
{
public int DeliveryId { get; set; }
public DateTime? LoadDate { get; set; }
public DateTime? ScheduledTime { get; set; }
public DateTime? ArrivalTime { get; set; }
public int? LoadNumber { get; set; }
public string Shift { get; set; }
public string SupplierNumber { get; set; }
public string SupplierName { get; set; }
public string Carrier { get; set; }
public bool? IsCancelled { get; set; }
public bool? IsConfirmed { get; set; }
public bool? IsBackHaul { get; set; }
public int? ActAmbientFullPallets { get; set; }
public int? ActAmbientMixedPallets { get; set; }
public int? ActReeferPallets { get; set; }
public int? ActCageVaultPallets { get; set; }
public int? ActBlcpallets { get; set; }
public int? ActTotalPallets { get; set; }
public int? ActTotalLpns { get; set; }
public bool? MarkAsDeleted { get; set; }
public string CreatedUser { get; set; }
public DateTime? CreatedDttm { get; set; }
public string UpdatedUser { get; set; }
public DateTime? UpdatedDttm { get; set; }
}
public class ActualDeliveriesViewModel
{
public int DeliveryId { get; set; }
public int ActualDeliveryId { get; set; }
public string CompositeId { get; set; }
public DateTime? LoadDate { get; set; }
public DateTime? ScheduledTime { get; set; }
public DateTime? ActualTime { get; set; }
public string Shift { get; set; }
public int? LoadNumber { get; set; }
public string SupplierName { get; set; }
public string Carrier { get; set; }
public bool? IsConfirmed { get; set; }
public bool? IsBackHaul { get; set; }
public bool? IsCancelled { get; set; }
public string DockDoor { get; set; }
public string ArrivalComments { get; set; }
public string SetTemp { get; set; }
public string Unloader { get; set; }
public DateTime? UnloadStart { get; set; }
public DateTime? UnloadEnd { get; set; }
public int? ActualAmbientFull { get; set; }
public int? ActualAmbientMixed { get; set; }
public int? ActualReefer { get; set; }
public int? ActualCageVault { get; set; }
public int? ActualBlc { get; set; }
public int? ActualTotalPallets { get; set; }
public int? ActualTotalLpns { get; set; }
}
public List<ActualDeliveriesViewModel> CovertToViewModel(List<DeliveryHdr> deliveries, List<ActualDelivery> actuals)
{
return deliveries.Where(e => e.MarkAsDeleted == false).GroupJoin(actuals, d => d.DeliveryId, a => a.DeliveryId, (d, a) =>
new ActualDeliveriesViewModel()
{
DeliveryId = d.DeliveryId,
ActualDeliveryId = a.Select(i => i.ActualDeliveryId).FirstOrDefault(),
CompositeId = d.DeliveryId + "_" + a.Select(i => i.ActualDeliveryId).FirstOrDefault(),
LoadDate = d.LoadDate,
ScheduledTime = d.ScheduledTime,
ActualTime = d.ArrivalTime,
LoadNumber = d.LoadNumber,
SupplierName = d.SupplierName,
Carrier = d.Carrier,
IsConfirmed = d.IsConfirmed,
IsBackHaul = d.IsBackHaul,
IsCancelled = d.IsCancelled,
DockDoor = a.Select(i => i.DockDoor).FirstOrDefault(),
ArrivalComments = a.Select(i => i.ArrivalComments).FirstOrDefault(),
SetTemp = a.Select(i => i.SetTemp).FirstOrDefault(),
Unloader = a.Select(i => i.Unloader).FirstOrDefault(),
UnloadStart = a.Select(i => i.UnloadStart).FirstOrDefault(),
UnloadEnd = a.Select(i => i.UnloadEnd).FirstOrDefault(),
ActualAmbientFull = a.Select(i => i.ActualAmbientFull).FirstOrDefault(),
ActualAmbientMixed = a.Select(i => i.ActualAmbientMixed).FirstOrDefault(),
ActualBlc = a.Select(i => i.ActualBlc).FirstOrDefault(),
ActualCageVault = a.Select(i => i.ActualCageVault).FirstOrDefault(),
ActualReefer = a.Select(i => i.ActualReefer).FirstOrDefault(),
ActualTotalPallets = (a.Select(i => i.ActualAmbientFull).FirstOrDefault() + a.Select(i => i.ActualAmbientMixed).FirstOrDefault() + a.Select(i => i.ActualBlc).FirstOrDefault() + a.Select(i => i.ActualCageVault).FirstOrDefault() + a.Select(i => i.ActualReefer).FirstOrDefault()) ?? 0
}).ToList();
}