J'ai le code suivant:
foreach (Logs log in _logsDutyStatusChange) { string driverid = log.did; }
8 Réponses :
Premièrement, créez une classe de comparaison et implémentez l'interface puis utilisez la surcharge du IequalityComParer
énumérable.distinct ( ) code> méthode qui prend une instance du comparateur d'égalité: p>
MHH ... peut-être utiliser ienumerable
distinct () code> fonction? P>
+1, mais un exemple serait utile si l'OP ne connaît pas Linq;)
Eh bien ... il semble qu'il y ait des exemples sur cette page;)
Vous devriez faire:
foreach (string id in _logsDutyStatusChange.Select(x=>x.did).Distinct()) { string driverid = id; }
Peut aussi bien utiliser dernier code> après le
distinct code> et renverser le
foreach code>
@JuHarr: Je pense qu'il est raisonnable de supposer qu'il y a vraiment plus de code qu'une déclaration variable dans le corps de la boucle.
Eh bien, je n'étais pas sûr s'il fait autre chose avec l'identifiant de la boucle, si je comprends, c'est juste un échantillon qu'il a affiché.
Vous pouvez utiliser distinct si votre classe de journaux implémente IQUABLETABLE
Sinon, un «hacky» rapide peut être d'utiliser quelque chose comme P>
foreach (var group in _logsDutyStatusChange.GroupBy(l => new { log.did, .... more identifying fields }) { string driverid = group.Key.did; }
Votre code n'ajoute rien maintenant, il s'agit simplement de définir une chaîne (déclarée dans la portée de la boucle) à chaque valeur. Le résultat final serait que la dernière valeur, et il serait hors de portée du code suivant de toute façon. Si vous essayez de les ajouter à une chaîne, séparées par des virgules, par exemple, essayez ceci:
string driverids = string.Join(",", _logsDutyStatusChange .Select(item=>item.did) .Distinct() .ToArray());
au lieu de Foreach'ing'ing'ing'ing'ing'ing'ing'ing'ing'servy, vous pouvez utiliser Linq pour obtenir une collection de distincte et de boucle à travers celles-ci, à la place:
foreach (Logs log in _logsDutyStatusChange.Select(l => l.did).Distinct()) { //Handling code here }
Voici une approche: distinct () code> ne fonctionne pas tout à fait ici, car il ne vous obtiendra que le "code> distinct" / code > s. p> p>
Cela devrait fonctionner (sans linq):
Hashset<string> alreadyEncountered = new Hashset<string>(); foreach (Logs log in _logsDutyStatusChange) { if(alreadyEncountered.Contains(log.did)) { continue; } string driverid = log.did; alreadyEncountered.Add(driverid); }