2010-03-31 6 views
1

Je suis en train de la à interroger mon référentiel de mise à jour d'état en utilisant les éléments suivantsrequête Linq avec plusieurs où est

var result = (from s in _dataContext.StatusUpdates 
        where s.Username == "friend1" && s.Username == "friend2" etc... 
        select s).ToList(); 

Au lieu d'utiliser s.Username == "friendN" est en permanence de toute façon je peux passer une liste ou un tableau ou quelque chose comme ça plutôt que la spécification chacun, ou puis-je utiliser une boucle foreach au milieu de la requête.

Merci

+0

duplication possible de http://stackoverflow.com/questions/679644/multiple-where-clause-in-linq – Jimmy

+0

woah, neato. Autocomments. – Jimmy

+0

désolé, autocomments serait cool tho! – Dan

Répondre

0

Si vous avez seulement besoin pour vérifier si la propriété Username a une valeur spécifiée, vous pouvez créer une liste des valeurs et ensuite utiliser une méthode telle que All ou Any pour vérifier si certaines conditions s'appliquent à tous les éléments du tableau.

Votre exemple semble un peu suspect - le nom d'utilisateur s.Username ne peut pas être égal à plusieurs chaînes différentes. Voulez-vous vérifier s'il est égal à l'un des noms (spécifiés)? Cela pourrait être écrit comme ceci:

var friends = new[] { "friend1", "friend2", ... }; 
var result = 
    from s in dc.StatusUpdates 
    where friends.Any(fr => s.Username == fr) 
    select s; 

Cela renvoie toutes les mises à jour d'état tels que la propriété Username est égale à l'un des noms d'ami spécifiés (spécifiés comme un tableau, mais vous pouvez utiliser toute IEnumerable<string>).

+0

doux, merci pour cette excellente réponse mate, travaillé comme un régal. Je suis un étudiant et nouveau à linq essayant juste ainsi de comprendre une partie de la nouvelle syntaxe. J'aime la façon dont vous avez écrit ce friends.Any (fr => s.Username == fr) ... très facile à lire et à comprendre ce qui se passe, mais je ne sais pas si je l'aurais trouvé par moi-même :(merci pour l'aide – Dan

+0

LINQ est assez flexible, en particulier lorsque vous utilisez des méthodes d'extension de manière explicite.Quelques bonnes ressources avec plus d'informations sont 101 exemples LINQ: http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx et une liste de méthodes d'extension (telles que 'Any'): http://msdn.microsoft.com/fr-fr/library/system.linq.enumerable_methods.aspx –

0

Yo pourrait le faire comme ceci:

IQueryable<s> query= _dataContext.StatusUpdates; 
foreach (var item in names) 
{ 
    query = query.Where(p=>p.Username == item); 
} 
List<s> result = query.ToList(); 
0

Je pense que je déconné avec certains types de données de la vôtre, mais cela devrait être proche:

var names = new List<string>(); 
    // populate names 

    var updates = new List<StatusUpdate>(); 
    // populate updates 

    var result = (from s in updates 
      where names.Contains(s.ToString()) 
      select s).ToList();