я испытываю колебания в результатах в зависимости от того, когда я указать, где положение ...IQueryable разные результаты при добавлении где положение позже
Если я использую:
query1 = from ct in CustomerTransfers
join j in Jobs on ct.Stock.JobNo equals j.JobNo
join o in Organisations on j.OrganisationId equals o.OrganisationId into oGroup
from o in oGroup.DefaultIfEmpty()
where ct.OrganisationId == intCustomerB &&
ct.NewOrganisationId == intCustomerA
group new { ct, j, o } by ct.WedNo into g
let largestValue = g.OrderByDescending(x => x.ct.TransferNo).FirstOrDefault()
select new
{
Id = g.Key,
OrganisationId = largestValue.ct.OrganisationId,
NewOrganisationId = largestValue.ct.NewOrganisationId,
};
query1.ToList();
дает два результата ... но если я удалить следующие из начального IQueryable строительства:
where ct.OrganisationId == intCustomerB &&
ct.NewOrganisationId == intCustomerA
и добавить их немедленно позже, используя, где положение так:
query2 = from ct in CustomerTransfers
join j in Jobs on ct.Stock.JobNo equals j.JobNo
join o in Organisations on j.OrganisationId equals o.OrganisationId into oGroup
from o in oGroup.DefaultIfEmpty()
group new { ct, j, o } by ct.WedNo into g
let largestValue = g.OrderByDescending(x => x.ct.TransferNo).FirstOrDefault()
select new
{
Id = g.Key,
OrganisationId = largestValue.ct.OrganisationId,
NewOrganisationId = largestValue.ct.NewOrganisationId,
};
query2 = query2.Where (q => q.OrganisationId == intCustomerB && q.NewOrganisationId == intCustomerA);
query2.ToList();
Я получаю один результат.
Правильно ли я предполагаю, что с помощью метода query2 он обертывает весь IQueryable предложением where, а не добавляет предложение where в IQueryable (что приведет к тому, что IQueryable идентичен запросу1)? Это кажется единственным логическим объяснением.
До этого «откровения» я бы подумал, что для достижения 1 результата (query2) мне пришлось бы оценивать query2 с помощью .ToList(), а затем применять оператор where к этому списку.
Ahhh ... хорошо заметили ... если различие в результатах связано с тем, что применяется группировка, то есть до или после фильтрации, она имеет общий смысл. –
Группировка на самом деле говорит «дайте мне запись с max transferno», а предложение where говорит «дайте мне записи для этих организаций» ... чтобы вы могли различить, порядок, в котором они выполняются, имеет большой эффект , –