2010-09-28 18 views
1

J'utilise le moteur de règles de WF dans une application et certaines des conditions impliquent la recherche d'une condition dans une collection. Il serait idéal de faire quelque chose comme:Existe-t-il un moyen d'utiliser des expressions lambda dans RuleSetDialog pour définir une condition?

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

Malheureusement, je ne semble pas avoir accès aux extensions Linq pour les collections. J'ai essayé de passer en System.Data.Linq à travers le TypeProvider param pour RuleSetDialog mais cela n'a pas fait apparaître les méthodes Linq.

Toute aide ou idée appréciée!

Répondre

-1

J'ai été en mesure d'accéder aux extensions si j'utilise la syntaxe Query au lieu de la syntaxe Lambda.

Ex: From x in CollectionObject select etc...

Edit: image Ajouté

alt text

+0

Je ne peux pas les utiliser dans RuleSetDialog. Il ne reconnaîtra pas la syntaxe. Quelque chose de spécial que vous avez fait pour les exposer? – GarthT

+0

Désolé, peut-être que je ne comprends pas exactement ce qu'est le RuleSetDialog, je ne connais pas trop Workflow. J'ai modifié mon message pour montrer comment j'ai pu effectuer une requête LINQ et l'affecter à mon objet. – JSprang

2

Je n'ai aucune expérience avec WF Ma réponse est uniquement basée sur ce que je l'ai vu sur le web jusque là. Vous pouvez vouloir vérifier this blog post.

Le problème avec l'éditeur de jeu de règles est qu'il ne permet pas l'utilisation d'expressions lambda. Ils ne sont toujours pas des citoyens de première classe dans le monde des outils de développement .NET, par ex. La fenêtre immédiate ne les compilera pas non plus.

Pour autant que j'ai découvert, il n'y a pas de solution hors de la boîte au problème, mais celui-ci me semble bien à:

Placez tous de votre style de code LINQ articles en Propriétés ou méthodes auxquelles vous pouvez accéder à partir de la fenêtre Condition à . Pas une réponse superbe, mais fonctionne dans une liaison.

Vous pouvez définir une propriété comme

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

puis utiliser cette propriété dans votre expression définie. Je voudrais également noter que l'utilisation Toute méthode d'extension est préférable pour savoir si une séquence n'est pas vide parce que N'importe quel ne nécessite pas tous les éléments à énumérer.

S'il vous plaît laissez-moi savoir que cela fonctionne pour vous.

+0

Je pourrais finir par utiliser cette solution si je n'arrive pas à trouver quelque chose de plus générique. J'ai essayé de le faire avec des génériques en vain jusqu'à présent. L'exigence est que ceci devrait être configurable à travers une sorte d'interface ou de fichier texte .... Cette exigence pourrait devoir être truquée - au moins à court terme. – GarthT