Объединение данных по дате через LINQ - C#
Формулировка задачи:
Помогите разобраться с запросом. Есть следующие 2 класса:
Мне нужно сформировать единый сгруппированный список со следующими полями: Месяц, Год, Summa, SumEntrance, SumAdded
Вот получил 2 списка с полями:
Как можно создать единый список, в котором произойдет объединение по полям Месяц и Год? Заранее спасибо
Листинг программы
- public partial class Expence
- {
- public int Id { get; set; }
- public System.DateTime ExpDate { get; set; }
- public string ExpDescription { get; set; }
- public decimal Summa { get; set; }
- public int TypeExpenceId { get; set; }
- public virtual TypeExpence TypeExpences { get; set; }
- }
- public partial class Profit
- {
- public int Id { get; set; }
- public System.DateTime ProfDate { get; set; }
- public string ProfDescription { get; set; }
- public decimal SumEntrance { get; set; }
- public decimal SumAdded { get; set; }
- public int PersonId { get; set; }
- public virtual Person Persons { get; set; }
- }
Листинг программы
- var expences = db.ExpenceSet.AsNoTracking()
- .Select(x => new { x.ExpDate.Month, x.ExpDate.Year, x.Summa })
- .GroupBy(x => new { x.Month, x.Year })
- .Select(y => new
- {
- y.Key.Month,
- y.Key.Year,
- SumExp = y.Sum(k => k.Summa)
- });
- var profits = db.ProfitSet.AsNoTracking()
- .Select(x => new
- {
- x.ProfDate.Month,
- x.ProfDate.Year,
- x.SumEntrance,
- x.SumAdded
- })
- .GroupBy(x => new { x.Month, x.Year })
- .Select(y => new
- {
- y.Key.Month,
- y.Key.Year,
- SumEntProf = y.Sum(k => k.SumEntrance),
- SumAddProf = y.Sum(k => k.SumAdded)
- });
я так понял можно все сделать с помощью GroupJoin, вот только он не работает с необобщенными коллекциями, можно это как-то обойти или нужно создавать новые классы?
Решение задачи: «Объединение данных по дате через LINQ»
textual
Листинг программы
- var result = from m in (from e in db.Expence
- from p in db.Profit.Where(x => x.ProfDate.Year == e.ExpDate.Year && x.ProfDate.Month == e.ExpDate.Month).DefaultIfEmpty()
- select new
- {
- e.ExpDate.Month,
- e.ExpDate.Year,
- e.Summa,
- p.SumEntrance,
- p.SumAdded
- })
- group m by new { m.Month, m.Year } into newGroup
- let Summa = newGroup.Sum(x => x.Summa)
- let SumEntrance = newGroup.Sum(x => x.SumEntrance)
- let SumAdded = newGroup.Sum(x => x.SumAdded)
- orderby newGroup.Key.Year descending, newGroup.Key.Month ascending
- select new
- {
- newGroup.Key.Month,
- newGroup.Key.Year,
- Summa,
- SumEntrance,
- SumAdded
- };
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д