2015-09-26 2 views
0

Я использовал реактивные расширения с большим успехом .... статически определяющие критерии в .Where(), а также более простые критерии и агрегации.Реактивные расширения Загрузка/сохранение выражений linq

То, что я хотел бы сделать, это разрешить некоторую настраиваемость для пользователей во время выполнения. Я не могу придумать отличный способ сделать это ... но было несколько идей ... Im ходатайствует о других способах этого сделать.

Поскольку это не похоже на то, что я действительно смогу иметь пользователя через веб-приложение, определить реальное выражение linq ... Я предполагаю, что мне нужно будет создать какой-то объект сложных критериев, который я могу сериализовать на/с диска и перевести на этот linq во время запуска.

Есть ли лучший способ сделать это, или есть проекты, которые расширяются на RX, как это?

+0

Пожалуйста, разместите свои идеи. Это даст нам основание для работы. – Enigmativity

+0

На канале Microsoft 9 есть интересные видеоролики о том, как Rx используется для питания Cortana. По-видимому, они расширили объекты Rx, включив сериализацию. – Enigmativity

+0

Итак, я нашел ссылку на дискуссию Channel9 с Бартом де Сметом о том, как rx использовался в Cortana ... это именно то, что я искал ... кроме того, что, похоже, не было достаточной информации, чтобы реально построить какие-либо проекты сами. https://channel9.msdn.com/Shows/Going+Deep/Bart-De-Smet-Rx-and-Cortana – Ronnyek

ответ

0

Да, безусловно, вы можете использовать System.Linq.Dynamic пакет NuGet для достижения этой цели, например:

var p = Expression.Parameter(typeof(long), "t"); 
    var lambda = (Func<long,bool>)System.Linq.Dynamic.DynamicExpression 
    .ParseLambda(new[] { p }, typeof(bool),"t % 2 == 0").Compile();  
    var subs = Observable.Interval(TimeSpan.FromSeconds(1)).Where(lambda); 

В коде выше вы можете упорствовать строку, которая находится в фильтре и перезагрузить его, как вам нравится.