Это в основном любопытство, а не реальная проблема, так как я уже исправил эту ошибку. Я был бы рад получить глубокий ответ, который объясняет механику LINQ, стоящую за этим волшебством. Итак, у меня есть этот запрос: < /p>
List imsCMMMeasurements =
(from i in context.IMS_CMM_Measurement
where i.Job_FK == jobId
&& currentOperationCharacteristics.Contains(i.Characteristic_FK)
select i)
.GroupBy(elm => elm.Characteristic_FK)
.Select(CharacGroup => CharacGroup.GroupBy(elm => elm.Part_Number))
.Select(CharacGroup => CharacGroup.Select(PartGroup => PartGroup.OrderByDescending(measure => measure.Timestamp)))
.Select(CharacGroup => CharacGroup.Select(PartGroup => PartGroup.FirstOrDefault()))
.Select(CharacGroup => CharacGroup.OrderBy(measure => measure.Part_Number))
.Select(CharacGroup => CharacGroup.ToList()).ToList();
< /code>
По сути, он проводит измерения из базы данных и группирует их по характеристикам. Для каждой характеристики есть несколько мер, которые соответствуют разным частям, и некоторые части измеряются более одного раза. В более позднем случае мы принимаем только самую последнюю меру (такую с наибольшей меткой времени, которая представляет собой запись в формате даты). Чтобы сделать это, я должен заказать меру для каждой части с помощью временной метки в порядке уменьшения. К сожалению, это делает полную противоположность: это требует самой старой меры. 4-я строка): < /p>
List imsCMMMeasurements =
(from i in context.IMS_CMM_Measurement
where i.Job_FK == jobId
&& currentOperationCharacteristics.Contains(i.Characteristic_FK)
select i).ToList()
.GroupBy(elm => elm.Characteristic_FK)
.Select(CharacGroup => CharacGroup.GroupBy(elm => elm.Part_Number))
.Select(CharacGroup => CharacGroup.Select(PartGroup => PartGroup.OrderByDescending(measure => measure.Timestamp)))
.Select(CharacGroup => CharacGroup.Select(PartGroup => PartGroup.FirstOrDefault()))
.Select(CharacGroup => CharacGroup.OrderBy(measure => measure.Part_Number))
.Select(CharacGroup => CharacGroup.ToList()).ToList();
Это в основном любопытство, а не реальная проблема, так как я уже исправил эту ошибку. Я был бы рад получить глубокий ответ, который объясняет механику LINQ, стоящую за этим волшебством. Итак, у меня есть этот запрос: < /p> [code]List imsCMMMeasurements = (from i in context.IMS_CMM_Measurement where i.Job_FK == jobId && currentOperationCharacteristics.Contains(i.Characteristic_FK) select i) .GroupBy(elm => elm.Characteristic_FK) .Select(CharacGroup => CharacGroup.GroupBy(elm => elm.Part_Number)) .Select(CharacGroup => CharacGroup.Select(PartGroup => PartGroup.OrderByDescending(measure => measure.Timestamp))) .Select(CharacGroup => CharacGroup.Select(PartGroup => PartGroup.FirstOrDefault())) .Select(CharacGroup => CharacGroup.OrderBy(measure => measure.Part_Number)) .Select(CharacGroup => CharacGroup.ToList()).ToList(); < /code> По сути, он проводит измерения из базы данных и группирует их по характеристикам. Для каждой характеристики есть несколько мер, которые соответствуют разным частям, и некоторые части измеряются более одного раза. В более позднем случае мы принимаем только самую последнюю меру (такую с наибольшей меткой времени, которая представляет собой запись в формате даты). Чтобы сделать это, я должен заказать меру для каждой части с помощью временной метки в порядке уменьшения. К сожалению, это делает полную противоположность: это требует самой старой меры. 4-я строка): < /p> List imsCMMMeasurements = (from i in context.IMS_CMM_Measurement where i.Job_FK == jobId && currentOperationCharacteristics.Contains(i.Characteristic_FK) select i).ToList() .GroupBy(elm => elm.Characteristic_FK) .Select(CharacGroup => CharacGroup.GroupBy(elm => elm.Part_Number)) .Select(CharacGroup => CharacGroup.Select(PartGroup => PartGroup.OrderByDescending(measure => measure.Timestamp))) .Select(CharacGroup => CharacGroup.Select(PartGroup => PartGroup.FirstOrDefault())) .Select(CharacGroup => CharacGroup.OrderBy(measure => measure.Part_Number)) .Select(CharacGroup => CharacGroup.ToList()).ToList(); [/code] Почему это работает сейчас?