2011-06-15 3 views
-1

J'ai une requête semblable à ceci:Linq return null sur « false » où clausule

var solution = (from hit2 in Hits.Where(x => x.Combination.Count == 2) 
       where IsPossibleHit(hit2, 2, currentSymbols) 
       from hit3 in Hits.Where(x => x.Combination.Count == 3) 
       where IsPossibleHit(hit3, 3, currentSymbols) 
       from hit4 in Hits.Where(x => x.Combination.Count == 4) 
       where IsPossibleHit(hit4, 4, currentSymbols) 
       from hit5 in Hits.Where(x => x.Combination.Count == 5) 
       where IsPossibleHit(hit5, 5, currentSymbols) 
       select new 
       { 
        hitsList = new List<Hit>(){ 
        hit2, 
        hit3, 
        hit4, 
        hit5} 
       }).ToList(); 

mon problème est que lors de groupes, si HIT2 et hit3 sont des coups possibles, j'ai besoin le nouvel objet être créé, mais, parce que hit4 renvoie false, la combinaison entière est rejetée.

Comment y parvenir?

EDIT: Je pense que je ne l'ai pas fait comprendre ce que je dois, ou ce que mon problème est:

Mon problème est que, lorsque IsPossibleHit (hitN) retourne false, toute combinaison est mis au rebut (par LINQ) , mais ce dont j'ai besoin, c'est que l'objet soit créé de toute façon, avec les hits qui retournent false mis à null, ou même pas ajoutés à la liste Hit du nouvel objet.

+0

Si vous ne voulez pas hit4, alors pourquoi le mettre dans la clause where? –

+0

Je n'en ai besoin que si le IsPossibleHit pour hit4 renvoie vrai. (la requête rejette la combinaison, pas moi) –

+0

Ensuite, il fait ce que vous voulez, hit4 renvoie false, la combinaison entière est défaussée. Je peux me méprendre ici. –

Répondre

1

Je pense que ce que vous voulez faire est:

var res = Hits.Where(h => h.Combination.Count >= 2 
         && h.Combination.Count <= 5 
         && IsPossibleHit(h, h.Combination.Count, currentSymbols) 
       ).ToList(); 
2
var solution = (from hit2 in Hits.Where(x => x.Combination.Count == 2) 
       where IsPossibleHit(hit2, 2, currentSymbols) 
       let h3 = from hit3 in Hits.Where(x => x.Combination.Count == 3) 
          where IsPossibleHit(hit3, 3, currentSymbols) 
       let h4 = from hit4 in Hits.Where(x => x.Combination.Count == 4) 
          where IsPossibleHit(hit4, 4, currentSymbols) 
       let h5 = from hit5 in Hits.Where(x => x.Combination.Count == 5) 
          where IsPossibleHit(hit5, 5, currentSymbols) 
       select new 
       { 
        hitsList = new List<Hit>(){ 
        hit2, 
        h3, 
        h4, 
        h5} 
       }).ToList(); 

Essayez quelque chose comme ça. Veuillez vérifier la syntaxe, car je ne l'ai pas exécuté ou compilé.

1

Vous souhaitez regrouper par nombre de résultats et ne conserver que les résultats possibles dans chaque groupe? Filtre à Where puis GroupBy:

var groupedHits = from h in Hits 
        where h.Combination.Count >= 2 && h.Combination.Count <= 5 
        where IsPossibleHit(h, h.Combination.Count, currentSymbols) 
        group h by h.Combination.Count