C# GroupJoin无需从关联列表中选择内容

C# GroupJoin无需从关联列表中选择内容,c#,.net,asp.net-mvc,lambda,telerik,C#,.net,Asp.net Mvc,Lambda,Telerik,所以我有两个类,我正试图将它们组合成一个ViewModel,以便在应用程序中使用。我试图找到lambda语法来执行两个对象之间的左连接(实际传递,DeliveryHdr)。在某些情况下,DeliveryHdr是按计划进行的计划交付,实际交付是在交付后收集的详细信息。我正在使用提供的方法(CovertToViewModel)组合这两个对象并返回一个ViewModels列表,它的功能与我希望的一样,但我认为必须有一种更简单的方法?如何执行1对1的左联接,而不必像下面那样在联接列表上执行Select

所以我有两个类,我正试图将它们组合成一个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();
        }