Syntaxe Linq - Sélection de plusieurs colonnes


96

Ceci est ma syntaxe Linq que j'utilise pour mon modèle d'entité

IQueryable<string> objEmployee = null;

objEmployee = from res in _db.EMPLOYEEs
              where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
              select res.EMAIL;

Comment puis-je sélectionner plusieurs colonnes? Comme je veux sélectionner res.ID également. Et comment puis-je les recevoir? IQueryable ne fonctionnera pas je pense. Et cela s'appelle Linq to SQL - non?


3
LinqToSql et le framework d'entité sont différents. Voir stackoverflow.com/questions/8676/…
gideon

Réponses:


189

Comme les autres réponses l'ont indiqué, vous devez utiliser un type anonyme.

En ce qui concerne la syntaxe, je préfère de loin le chaînage de méthodes. L'équivalent du chaînage de la méthode serait: -

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo)
    .Select(x => new { x.EMAIL, x.ID });

AFAIK, la syntaxe déclarative LINQ est convertie en une chaîne d'appels de méthode similaire à celle-ci lorsqu'elle est compilée.

METTRE À JOUR

Si vous voulez l'objet entier, il vous suffit d'omettre l'appel à Select(), c'est- à -dire

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo);

72

Vous pouvez utiliser des types anonymes par exemple:

  var empData = from res in _db.EMPLOYEEs
                where res.EMAIL == givenInfo || res.USER_NAME == givenInfo
                select new { res.EMAIL, res.USER_NAME };

pouvez-vous suggérer comment écrire correctement cette expression: sélectionnez new {(DateTime.Now - dette.ClaimDate), dette.Amount}; ? Il jette une erreur: déclarateur de membre de type anonyme non valide
Dainius Kreivys

1
@DainiusKreivys select new { Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount}. Le formulaire utilisé dans la réponse est un raccourci, où le nom de membre dans l'expression d'initialisation est utilisé comme nom de champ de type anonyme. Par exemple, new {res.EMAIL, res.USER_NAME}est un raccourci pour new {EMAIL = res.EMAIL, USER_NAME = res.USER_NAME}. Dans le cas où il y a une expression, comme dans votre cas avec les dates - le raccourci ne s'applique pas, d'où une erreur du compilateur.
Ivan Danilov

5
 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {res.EMAIL, res.USERNAME} );

OU vous pouvez utiliser

 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {email=res.EMAIL, username=res.USERNAME} );

Explication:

  1. Sélectionnez l'employé dans la base de données comme res.

  2. Filtrez les détails de l'employé selon la condition where.

  3. Sélectionnez les champs obligatoires de l'objet employé en créant un objet anonyme à l'aide de new {}


ajouter une explication en réponse.
Sandeep

Comment accédez-vous aux différentes colonnes?
ARidder101
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.