2017-02-18 1 views
-3

J'ai le code suivantLinq Enumerable.Where Func pas appelé

var filteredList = posData.Where(x => MyFilter(x, ruleDetail.wheres)).ToList(); 

où MyFilter est défini comme

static bool MyFilter(Dictionary<string,string> dict, List<WhereClause> wheres) 
    { 
     if (dict["x"] == "y") 
      return true; 
     else 
      return false; 
    } 

posdata est de type

List<dictionary<string,string>> 

je un point d'arrêt dans la fonction MyFilter mais l'exécution du code n'y arrive jamais. Je cherche MyFilter pour faire une analyse personnalisée basée sur le paramètre wheres. Ceci est seulement une petite partie du code. Aidez-moi à comprendre pourquoi MyFilter n'est pas appelé?

+0

Est-ce la 'postData' une collection de' Dictionnaire '? –

+1

En aparté, la méthode body of you peut être remplacée par simplement: 'return dict [" x "] ==" y ";' – itsme86

+0

Peut-être que 'posData' est vide? Cela empêcherait 'MyFilter()' d'être appelé. – itsme86

Répondre

1

Votre code devrait fonctionner correctement et comme prévu. La seule raison pour laquelle cela ne fonctionnerait pas dans votre cas est si posData est vide, alors assurez-vous que ce n'est pas.

Je l'ai essayé avec ce code (qui est essentiellement le même que le vôtre):

static void Main() 
{ 
    // create test collection 
    var posData = new List<Dictionary<string,string>>(); 
    var test = new Dictionary<string,string>(); 
    test.Add("x", "y"); 
    posData.Add(test); 

    // call the Where function 
    var filteredList = posData.Where(x => MyFilter(x)).ToList(); 

    Console.WriteLine(filteredList.Count); // outputs "1" 
} 

static bool MyFilter(Dictionary<string,string> dict) 
{ 
    Console.WriteLine("hello"); // outputs "hello" 
    return dict["x"] == "y"; 
}