2011-02-23 3 views
1

Je veux envoyer une table LINQ (entité) en tant que paramètre à une fonction pour obtenir une valeur dans la sélection {}. Le but est de retourner une valeur basée sur plusieurs propriétés de la table/entité, et je ne veux pas que toute la logique qui détermine la valeur de retour soit dans l'instruction LINQ. Fondamentalement, la ligne 'value = GetValue (tbl)' est-elle possible?Pouvez-vous passer une table LINQ à une fonction?

Public class MyClass 
{ 
    public int value { get; set; } 
} 

//Some General function to determine return value from multiple properties 
Private int GetValue(MyEntity cls) 
{ 
    if (cls.var1 == 1) 
     return var2; 
    if (cls.var1 == 2) 
     return cls.var2 - cls.var3; 

    return -1; 
} 

Public List<MyClass> GetStuff(int iType) 
{  
    List<MyClass> myClass = (from tbl in context.MyEntity 
          where tbl.MyType == iType 
          select new MyClass 
          { 
           value = GetValue(tbl) 
          }).ToList<MyClass>(); 
    return myClass; 
} 

Répondre

1

LINQ to Entities est conçu pour convertir toute requête LINQ dans une requête SQL équivalent qui fonctionne sur le serveur de sorte que vous devez simplement utiliser les fonctions et les expressions qu'il sait comment traduire SQL. Vous ne pouvez pas simplement appeler des fonctions arbitraires.

-Ce pourrait être résolu soit par la réécriture de votre logique de calcul dans la requête LINQ et c'est la chose que vous mentionnez que vous ne voulez pas.

solution -Autre serait d'ajouter des propriétés calculées à MyClass qui se fondent sur les propriétés de données (var1, var2, var3, ...) à calculer. -Vous pourriez utiliser quelque chose comme la technique mentionnée dans ce blog: http://daniel.wertheim.se/2011/02/07/c-clean-up-your-linq-queries-and-lambda-expressions/ pour placer votre logique dans un emplacement central en dehors de la requête LINQ.

+0

Le problème que je suis en cours d'exécution en est de ne pas appeler une fonction arbitraire, il est d'appeler la fonction arbitraire avec une « table ». Mon espoir était d'envoyer la « table » comme un « objet » au lieu d'envoyer toutes les propriétés en tant que paramètres à la fonction (ou la manipulation de la logique dans la déclaration LINQ comme je l'ai mentionné précédemment). – user606934

+0

correction ... il semble que je ne peux pas utiliser une fonction arbitraire. merci pour l'aide, Mohammed! – user606934

Questions connexes