У меня есть код, я хочу сделать условное повторное использование, но я не знаю как. Мне нужен динамический IQueryable или что-то другое? Можете ли вы помочь мне сделать это или найти какую-нибудь инструкцию для этого?
DateTime dtTo = DateTime.Now;
DateTime notEndDt = new DateTime(2099, 1, 1);
var result = from o in data
select new
{
id,
Group1Type1result = o.group_id == 1 && o.type== 1 && (NeedActual ? o.dt_end == notEndDt : (o.dt_end == notEndDt || dtTo <= o.dt_end)) ? o.result : 0,
Group1Type2result = o.group_id == 1 && o.type== 2 && (NeedActual ? o.dt_end == notEndDt : (o.dt_end == notEndDt || dtTo <= o.dt_end)) ? o.result : 0,
Group2Type1result = o.group_id == 2 && o.type== 1 && (NeedActual ? o.dt_end == notEndDt : (o.dt_end == notEndDt || dtTo <= o.dt_end)) ? o.result : 0,
Group2Type2result = o.group_id == 2 && o.type== 2 && (NeedActual ? o.dt_end == notEndDt : (o.dt_end == notEndDt || dtTo <= o.dt_end)) ? o.result : 0
};
Я хочу получить что-то вроде этого:
int GetResultForGroup(Model.Data o, int groupId, int type)
{
DateTime dtTo = DateTime.Now;
DateTime notEndDt = new DateTime(2099, 1, 1);
return o.group_id == groupId && o.type == type && (NeedActual ? o.dt_end == notEndDt : (o.dt_end == notEndDt || dtTo <= o.dt_end)) ? o.result : 0,
}
var result = from o in data
select new
{
id,
Group1Type1result = GetResultForGroup(o, 1, 1),
Group1Type2result = GetResultForGroup(o, 1, 2),
Group2Type1result = GetResultForGroup(o, 2, 1),
Group2Type2result = GetResultForGroup(o, 2, 2)
};
Если я попытаюсь сделать это, как в IEnumerable LINQ toОбъекты не распознают метод метода Int32 GetResultForGroup (Model.Data, System.DateTime), и этот метод нельзя преобразовать в выражение хранилища.
upd: я знаю, что могу получить все из BD вIEnumerable и после него использовать мой метод, но могу ли я сделать это в IQueryable? У меня есть пейджинг после запроса.