2012-02-25 5 views
0

J'utilise les éléments suivants:données dans une collection Manipulation avec LINQ

 var menuItems = _menuRepository.GetPk(pk) 
      .Where(m => m.Status == "00") 
      .OrderBy(m => m.Order) 
      .Select(m => new MenuItem 
      { 
       PartitionKey = m.PartitionKey, 
       RowKey = m.RowKey, 
       Order = m.Order, 
       Link = m.Link 
      }); 

Pour récupérer une collection de chaînes comme celles-ci ci-dessous. Toutes les chaînes sont de la même longueur (8 colonnes) et sont classés dans l'ordre:

0-0-0-00 
0-1-0-00 
0-2-0-00 
0-3-0-00 
1-0-0-00 
1-1-0-00 
1-1-1-00 
1-1-2-00 
1-1-3-00 
1-2-0-00 
3-1-0-00 
3-2-0-00 

Ce que je dois faire est si on leur donne une chaîne telle que « 1-1-1-00 » alors je dois récupérer tous les lignes de la liste menuItems, où les quatre premières colonnes correspondent à la chaîne d'entrée à l'exception de la ligne où il y a un zéro dans la 5ème colonne. Tels que:

1-1-1-00 
1-1-2-00 
1-1-3-00 
+0

"Tels que:" - Vous avez oublié de coller quelque chose? –

+0

Merci j'ai ajouté la sortie. Est-ce que ma question est claire? C'est un peu difficile à expliquer. Je ne suis même pas sûr si je peux le faire avec LINQ. Peut-être que quelque chose dans une boucle for serait plus facile? –

+0

quelle 5ème colonne vous prenez? !! –

Répondre

3
String input = "1-1-1-00"; 
var wantedStrings = stringList.Where(str => str.StartsWith(input.Substring(0, 4)) && str[4] != '0'); 
+0

+1, bien que ne devrait pas être str [4]! = 0? –

+0

lol, correct :) – Sagi

2
string given = "1-1-1-00"; 
string sptGiven = given.Split('-'); 
var result = stringList.Where(m => m.Split('-')[0] == sptGiven[0] && 
           m.Split('-')[2] == sptGiven[2] && 
           m.Split('-')[3] == sptGiven[3]); 
+1

au lieu d'appeler trois fois sur chaque chaîne, vous pouvez envelopper le corps lambda dans {} affecter une variable une fois et ensuite l'utiliser. Hoever puisque les cordes sont fixes longueur vous pouvez simplement indexer dans un comparer le caractère –

+1

+1, vous avez absolument raison je juste copié et le coller 2 chronométré pour être la première réponse –

Questions connexes