web-dev-qa-db-fra.com

Expression lambda "IN" opérateur Existe?

Je cherche à construire l'expression Lambda comme ci-dessous

IQueryable<Object> queryEntity = 
                _db.Projects.Where(Project=>Project.Id.IN(1,2,3,4));

Je ne trouve pas d'opérateur IN dans l'expression Lambda.

Quelqu'un a des suggestions?

17
sivaL

Utilisez IEnumerable.Contains pour cela.

var idList = new[] { 1, 2, 3, 4 };
IQueryable<Object> queryEntity = 
                _db.Projects.Where(Project => idList.Contains(Project.Id));

Vous pouvez bien sûr construire idList inline.

23
Anders Arpi

Il n'y a pas d'opérateur in, mais il y a un contient. Inversez simplement votre logique:

IQueryable<Object> queryEntity = _db.Projects.Where(Project=>(new []{1,2,3,4}).Contains(Project.Id));

2
joshjeppson

Vous recherchez IEnumerable.Contains

_db.Projects.Where(Project => list.Contains(Project.Id));
0
Tilak

vous pouvez écrire le vôtre

public static bool In(this object item, IEnumerable list)
{
    return list.Contains(item);
}

public static bool In(this object item, params object[] list)
{
    return item.In(list);
}
0
slawekwin

pseudocode basé sur Anders solution votée.

  1. Hypothèses: Utilise les informations de Wikipedia Historical United États bonbons à la menthe .
  2. Jeu de données: StateMints.
  3. Champs: Lieu, Etat neuf.
  4. Condition: sélectionnez toutes les pièces ayant un identifiant de menthe.
  5. Exemple de données StateMints:
    Neuf, Lieu 

    1.O, Nouvelle-Orléans, Louisiane
    2.W, West Point, New York
    3.D, Denver, Colorado 

Ceci est mon code jusqu'à présent:

List<string> mints = new List<string> { "C", "CC", "D", "M", "O", "P", "S", "W" };  
var locations = StateMints.Where(p => mints.Contains(p.Mint.ToUpper())).Select(p => p.Location).ToList();
0
Greg Bologna