2010-03-18 2 views
4

Existe-t-il un moyen de traduire une expression en SQL pour l'utiliser avec LINQ to SQL?Traduction LINQ vers SQL de la méthode personnalisée

Par exemple, j'ai une méthode qui compare deux valeurs.

Exemple:

MyComparer.Compare(value1, value2, ">") return value1 > value2 
MyComparer.Compare(value1, value2, "=") return value1 == value2 
MyComparer.Compare(value1, value2, "<=") return value1 <= value2 

Je voudrais une requête comme:

var list = from i in dataContext.items 
      where MyComparer.Compare(i.value, someValue, "some operator") 
      select ... 

Cela ne fonctionnera pas parce que, évidemment, ne se traduit pas MyComparer à SQL.

Peut-être que c'est une question tordue, mais comment puis-je traduire cette méthode en SQL ou est-ce possible?

Répondre

4

L'option la plus pragmatique peut être compositon:

// build the core query 
var list = from i in dataContext.items 
      // most of your query 
      select ... 

// compose the value-filter if required 
switch(someOperator) { 
    case "=": list = list.Where(row => row.value1 == row.value2); break; 
    case ">": list = list.Where(row => row.value1 > row.value2); break; 
    case "<": list = list.Where(row => row.value1 < row.value2); break; 
} 

// now use "list" 

Si vous avez besoin quelque chose réutilisable, vous allez devoir mettre la main sale bâtiment (et probablement l'analyse syntaxique) expression des arbres (System.Linq.Expression) . Pas trivial.

Questions connexes