2010-09-28 1 views
1

Я использую механизм правил из WF в приложении, и некоторые из условий включают поиск коллекции для состояния. Было бы идеально, чтобы сделать что-то вроде:Есть ли способ использовать лямбда-выражения в RuleSetDialog для определения условия?

this.CollectionObject.Select(x => x.WantedProperty == searchValue).Count() > 0 

К сожалению, я, кажется, не имеют доступа к расширениям Linq для коллекций. Я пробовал прохождение в System.Data.Linq с помощью параметра TypeProvider для RuleSetDialog, но это не показало методы Linq.

Любая помощь или идеи оценены!

ответ

-1

Мне удалось получить доступ к расширениям, если я использую синтаксис запроса вместо синтаксиса лямбда.

Ex: From x in CollectionObject select etc...

Edit: Добавлено изображение

alt text

+0

Я не могу использовать их в RuleSetDialog. Он не распознает синтаксис. Что-нибудь особенное, что вы сделали, чтобы разоблачить их? – GarthT

+0

Извините, может быть, я не понимаю, что такое RuleSetDialog, я не слишком хорошо знаком с Workflow. Я редактировал свое сообщение, чтобы показать, как мне удалось выполнить запрос LINQ и назначить его моему объекту. – JSprang

2

У меня нет никакого опыта работы с WF так что мой ответ только на основании того, что я видел в Интернете так далеко. Вы можете проверить this blog post.

Проблема с редактором Rule Set заключается в том, что он не позволяет использовать лямбда-выражения. Они по-прежнему не являются первоклассными гражданами в мире инструментов .NET dev, например. Непосредственное окно также не будет компилировать их.

Насколько я выяснил, что нет никакого решения вне коробки к этой проблеме, но это выглядит хорошо для меня:

Места всех вашего стиля LINQ коды пунктов в Свойства или методы, которые вы можете получить от , из окна «Условие» . Не превосходный ответ, но он работает в привязке.

Вы можете определить свойство как

public bool HasAnyBeatlesAlbums { 
    get { 
     return this.MusicLibrary.Any (cd => cd.Artist == "Beatles"); 
    } 
} 

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

Пожалуйста, дайте мне знать, это работает для вас.

+0

Я могу в конечном итоге использовать это решение, если не могу придумать что-то более общее. Я пробовал делать это с помощью дженериков до сих пор. Требование состоит в том, что это должно настраиваться через какой-то интерфейс или текстовый файл ... Это требование, возможно, придется подделать - по крайней мере, в краткосрочной перспективе. – GarthT

Смежные вопросы