2009-10-19 14 views
1

Je squarque chaque entier dans une liste. Voici le code.Travailler sur l'expression lambda

class SomeIntgs 
{ 
    List<int> newList = new List<int>(); 

    public List<int> get() 
    { 
     IEnumerable<int> intrs = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 }; 
     newList.AddRange(intrs); 
     return newList; 

    } 
} 

Je reçois erreur principal()

SomeIntgs stg = new SomeIntgs(); 
    var qry = from n in stg.get() where (P => P*P) select n; 

Erreur: "Impossible de convertir l'expression lambda de type bool".

Aide S'il vous plaît.

Aussi aider moi, comment puis-je gérer lambda dans le contexte général

Répondre

4

lambda que la clause where prend spécifie comment vous correspondez un élément de votre IQueryable. Tout membre de l'IQueryable qui satisfait l'expression que vous fournissez sera renvoyé. (C'est pourquoi votre compilateur se plaint des bools).

Comme d'autres l'ont mentionné, vous pouvez supprimer la clause where pour mettre en carré chaque élément de la liste.

var ints = new int []{1,2,3,4,5,6,7,8}; 
var squares = ints.Select(x => x*x); 
var evenSquares = ints.Where(x => (x % 2) == 0).Select(x => x*x); // only square 
                //the even numbers in the list 
+0

Je reçois une erreur quand je vais pour var evensquares = à partir de even dans stg.get(). Où (x => (x% 2) == 0) .Sélectionner (x => x * x); Erreur: Une requête doit être terminée avec la clause select ou la clause de groupe –

+0

J'ai trouvé la solution que la clause de formulaire attend select.I l'ai obtenue et a changé mon coe.Thanks Kris –

7

Vous n'avez pas besoin where, essayez ceci:

SomeIntgs stg = new SomeIntgs(); 
var qry = from n in stg.get() select n*n; 

ou

var qry = stg.get().Select(P => P*P); 

Enumerable.Where est utilisé pour filtrer les éléments d'une séquence - ce que vous voulez vraiment faire est de projeter une nouvelle séquence d'éléments comme je ont montré ci-dessus.

+2

Je n'ai pas vu de requête linq avec une expression lambda comme ça, cela n'échouera-t-il pas aussi? – eglasius

+0

Je reçois l'erreur comme "le type de l'expression dans la clause select est incorrect" –

+0

@russeludana ... essayez le mien, comme je l'ai mentionné avant, c'est v. Bizarre pour une requête linq, je pense que c'est juste faux ... – eglasius

3
SomeIntgs stg = new SomeIntgs(); 
var qry = from n in stg.get() select n*n; 
+0

Je suis très particulier sur l'application de lambda ici. –

+0

@russeludana Vous n'avez pas besoin de lambda, peut-être devriez-vous expliquer plus précisément ce que vous voulez accomplir? – eglasius