У меня есть POCO вроде этого:
public class BatchTypesByNetwork
{
public Guid BatchTypeId { get; set; }
public string Name { get; set; }
public bool CanSchedule { get; set; }
public string Description { get; set; }
public Guid? NetworkTypeId { get; set; }
public string ReportDisplayId { get; set; }
public IEnumerable<BatchScheduleParameters> ScheduleParameters { get; set; }
}
и
public class BatchScheduleParameters
{
public Guid BatchTypeId { get; set; }
public Guid ParameterId { get; set; }
public string ParameterName { get; set; }
public string ParameterType { get; set; }
public string ParameterValue { get; set; }
public bool IsMultiSelection { get; set; }
}
Я делаю так:
Сначала я получаю все сети BatchTypesByNetwork следующим образом:
var allBatchTypes = await query.Join(_networkTypesRepository, bt => bt.NetworkTypeId, nt => nt.Id, (bt, nt) => new {bt, nt})
.Where(m => m.nt.Name == convertToString(networkType))
.Select(m =>
new BATCH.BatchTypesByNetwork
{
BatchTypeId = m.bt.Id,
Name = m.bt.Name,
CanSchedule = m.bt.CanSchedule,
Description = m.bt.Description,
NetworkTypeId = m.bt.NetworkTypeId,
ReportDisplayId = m.bt.ReportDisplayId
}).AsNoTracking().ToListAsync(serviceContext.CancellationToken);
Затем я l oop через batchTypes, подобный этому, и назначаю список BatchScheduleParameters отдельному batchType
foreach (var batchType in allBatchTypes)
{
var allScheduleParameters = await (from bp in _batchParametersRepository
join bt in _batchParameterTypesRepository
on bp.BatchParameterTypeId equals bt.Id
where bp.IsRequired == true
&& bp.BatchTypeId == batchType.BatchTypeId
select new BATCH.BatchScheduleParameters
{
BatchTypeId = bt.Id,
ParameterId = bp.BatchParameterTypeId,
ParameterName = bp.Name,
ParameterType = bt.Name,
IsMultiSelection = bp.AllowMultipleSelection == true ? true : false,
}
).AsNoTracking().ToListAsync(serviceContext.CancellationToken);
batchType.ScheduleParameters = allScheduleParameters;
}
Возможно ли сделать это в одном запросе без для l oop .