выражение в IQueryable с параметрами (как метод в IEnumerable) - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть код, я хочу сделать условное повторное использование, но я не знаю как. Мне нужен динамический 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? У меня есть пейджинг после запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...