J'ai un modèle comme ci-dessous valeurs d'échantillon p> chaîne de résultat: "rouge / rouge rouge", "jaune", "vert / bleu" strong> p> Règles de chaîne de sortie p> Mise en œuvre actuelle P>
List<string> _inflections = new List<string>();
var distinctIDs = inflections_model.Select(x => x.form_id).Distinct(); //find distinct IDs
foreach (int _id in distinctIDs) //for each distinct ID , join the string to LIST
{
string inflection_val = string.Join(" / ", from item in inflections_model
where item.form_id==_id
select item.props_name );
_inflections.Add(inflection_val);
}
string inflection_string = string.Join(", ", _inflections); //combine processed STRINGS to a comma separate list
5 Réponses :
Vous pouvez utiliser LINQ GroupBy et sélectionner:
var data = inflections_model.GroupBy(p=> p.props_id) // this gives you groups .Select(g => String.Join("/", g.OrderBy(r=>r.props_order) .Select(r=>r.props_name))) var inflection_string = string.Join(", ",data)
r => Propps_Order n'existe pas dans le contexte actuel
Ceci commande les groupes d'éléments basés sur la valeur la plus basse de props_order code> dans chaque groupe
Vous devez groupy code> éléments props_id et
Props_order comme suivant une seule linq:
var _inflections = inflections_model.OrderBy(o => o.props_order)
.GroupBy(i => i.props_id)
.Select(s => String.Join("/", s.Select(p => p.props_name)));
var inflection_string = String.Join(",", _inflections);
Même vous obtenez une sortie triée, groupby code> ne garantit pas que la commande sera préservée. Cela fonctionne pour Linq2Objects mais cela ne fonctionnera pas pour SQL par exemple.
OrderBy code> puis
GroupBy CODE> est trompeur et délicat. Il sera préférable de commander par
props_order code> le groupe lui-même.
Vous pouvez essayer ci-dessous la mise en oeuvre sortie: p> . Filet Fiddle P> P>
var list = models.OrderBy(x => x.props_order).ToLookup(x => x.props_id, x => x.props_name).Select(name => string.Join("/", name)); var result = string.Join(",", list); Prints "red/light red,yellow,green/blue" Better performance with LookupOn machine,GroupBy => takes 1.6215 millisecondsLookup => takes 0.2072 milliseconds
Confus, lequel devrait être sélectionné comme réponse des commentaires ci-dessous, peu d'entre eux renvoient le même résultat et demandant aux lecteurs d'utiliser la solution optimale pour eux.
Choisissez simplement le premier qui vous a adapté, sinon les gens continueront de poster des réponses comme se produisent maintenant.