У меня есть существующий запрос LINQ to SQL, где я пытаюсь разрешить различные группировки:
var result= dc.Report_Data
.Where(x => x.Year == Year)
.Where(x => x.Month >= Month)
.GroupBy(grouping)
.Select(g => new ReportViewModel(){
Month = g.Key.Month,
Option1 = g.Key.Option1,
Option2 = g.Key.Option2,
Amount = g.Sum(x => x.Amount)
})
.ToList();
Мне нужно разрешить группировать различные наборы свойств на основе внешнего параметра,Я устанавливаю значение по умолчанию, затем использую условные выражения, например:
Expression<Func<Report_Data, TResult>> grouping = g => new {g.Month, Option1 = g.prop1, Option2 = g.prop2};
if (userParameter == "X"){
grouping = g => new {g.Month, Option1 = g.prop3, Option2 = g.prop4};
} else if (userParameter == "Y") {
grouping = g => new {g.Month, Option1 = g.prop5, Option2 = g.prop6};
}
Затем я передаю grouping
в приведенный выше запрос. Проблема в том, что у меня есть анонимный тип в группировке и Expression<Func<Report_Data, TResult>>
ошибки, когда я использую TResult
в качестве Типа результата.
Есть ли способ использовать этот формат делегата выражения и указать общий или анонимный тип результата? (желательно без необходимости создавать класс для каждого типа результата) Или я должен разрешить различные группировки по другому механизму?