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?

Riz
la source
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);
Adam Ralph
la source
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 };
Ivan Danilov
la source
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 {}

Bimzee
la source
ajouter une explication en réponse.
Sandeep
Comment accédez-vous aux différentes colonnes?
ARidder101