У меня есть коллекция объектов, содержащих транзакционные данные. Этот набор данных имеет 3-х уровневые отношения между родителями и дочерними элементами с уровнями: Project> Stage> Transaction. Для каждого проекта и этапа будет проведено несколько транзакций.Как построить оператор наличия в linq с максимальным значением?
class CostElement
{
string ProjectNumber { get; set; }
string Stage { get; set; }
string DerivedCostElement { get; set; }
DateTime? Date { get; set; }
decimal? Amount { get; set; }
}
То, что я хочу, чтобы найти уникальный перечень элементов затрат (DerivedCostElement
), со счетчиком максимального количества раз он используется в любой одном проекте. То есть Подсчитайте количество этапов для каждого проекта, а затем выберите максимальное значение.
То, что я пытался до сих пор:
//count all cost elements per project
var aggregateQuery = from ce in _costElements
group ce by new { ce.ProjectNumber, ce.Stage, ce.DerivedCostElement }
into g
select new
{
g.Key.DerivedCostElement,
g.Key.ProjectNumber,
g.Key.Stage
};
//select cost elements having max count
var countQuery = from g in aggregateQuery
group g by new { g.DerivedCostElement, g.ProjectNumber }
into grp
select new CostElementCount
{
CostElement = grp.Key.DerivedCostElement,
ProjectNumber = grp.Key.ProjectNumber,
Count = grp.Count()
};
return countQuery.ToList();
Это по большей части работ, я в конечном итоге со списком элементов затрат на проект и максимальное количество вхождений в проекте. Однако результаты по-прежнему за проект, я хочу, это уникальный список только с максимум.
Может ли кто-нибудь помочь мне получить правильный результат? Также будут приветствованы любые предложения о том, как писать это более эффективно или лаконично.
Спасибо за ваш ответ. Это то, чего я хочу, но, возможно, я не совсем понял в своем вопросе. Это возвращает элемент затрат с наибольшим использованием. То, что я хочу, это список всех элементов затрат, причем максимальный каждый используется в проекте. – codemonkeh
Однако, если я просто перегруппирую свой запрос снова с помощью элемента затрат (например, в вашем вопросе), я могу просто сделать max там, и он работает. Хотя я не могу не надеяться, что есть более короткий способ сделать это. – codemonkeh
В моем тестовом решении я придумал список всех элементов затрат, а также название проекта, в котором было найдено самое большее, и счет. Возможно, я смоделировал это неправильно. Я добавил дополнительную информацию к моему ответу. –