2010-08-23 9 views
0

J'utilise LINQ-à-entités et voici ma requêteComment utiliser une valeur de paramètre comme propriété à sélectionner dans une requête LINQ?

public void SomeFunction(string searchField) 
{ 
var data = from a in dx.SomeTable where   
       a.SomeProperty="270" 
       select a; 
. 
. 
. 

} 

Maintenant, si je devais utiliser la valeur du paramètre « Searchfield » comme propriété d'être sélectionné dans la clause where alors comment puis-je fais le ?

i.e Je souhaite affecter la valeur du paramètre "searchField" à la propriété que je vérifie dans la clause where. Donc, la valeur de "SomeProperty" dans a.SomeProperty doit être la valeur de "searchField". Comment faire ça?

PS:

Je ne veux pas que a.SomeProperty = Searchfield.

Ce que je veux est lui-même « SomeProperty » à remplacer par la valeur de « Searchfield » puis, cela doit être vérifié pour voir si son égal à 270.

+0

Dans le code qui appelle 'SomeFunction', connaissez-vous le type de' a', ou savez-vous simplement qu'il s'agit d'un objet avec une propriété appelée 'SomeProperty'? – AakashM

+0

Salut, La fonction ne concerne qu'une seule table nommée "SomeTable" à laquelle je peux accéder en utilisant le datacontext "dx" Je sais qu'il existe de nombreuses propriétés (colonnes en vigueur) pour cette table et que la valeur "someField" sera le nom d'une de ces colonnes. C'était le problème. – Sandeep

Répondre

0

Si l'appelant connaît le type de votre a (disons que c'est MyType), je suggère que vous n'avez pas besoin LINQ dynamique - vous pouvez simplement passer une fonction sous-jacente:

public void SomeFunction(Func<MyType, bool> selector) 
{ 
    // ... 
    var data = from a in dx.SomeTable 
       where selector(a) 
       select a; 
} 

// Calling code 
SomeFunction(a => a.SomeProperty == "270"); 

Ou si vous voulez garder la valeur 270 au sein SomeFunction, passer dans une fonction de projection pour tirer SomeProperty:

public void SomeFunction(Func<MyType, string> propertyExtractor) 
{ 
    // ... 
    var data = from a in dx.SomeTable 
       where propertyExtractor(a) == "270" 
       select a; 
} 

// Calling code 
SomeFunction(a => a.SomeProperty); 

(excuses si cela ne compile pas, je suis actuellement loin d'un compilateur)

+0

Merci Aakash Je vais essayer de vérifier ça :) – Sandeep

Questions connexes