2009-10-22 7 views
1

J'ai deux matrices (je ne l'utiliserai nulle part car ce n'est pas une bonne logique, c'est pour mon but d'apprentissage).Projection des ensembles de dissociation dans LINQ

string[] names = new[] { "Joss", "Moss", "Kepler" }; 

string[] emails = new[] { "[email protected]", "[email protected]", "[email protected]" }; 

Comment utiliser LINQ pour faire des paires de valeurs clés comme

{"Joss","[email protected]"} ,{"Moss","[email protected]"} , {"Kepler","[email protected]"} 
  1. ids email sont mélangés dans des emails tableau string []
  2. considèrent les deux tableaux de chaînes gardent le nom unique et ID d'e-mail uniques (leur nom en tant qu'ID de messagerie électronique).

Comment utiliser Join pour projeter le résultat que je veux?

      var JoinDemo = from grpname in names 
          join 
          grpmails in emails 
          on grpname ???????? 

Répondre

1

Avec les contraintes que vous avez défini cela devrait faire le travail:

 var q = from name in names 
       join email in emails on name equals email.Remove(email.IndexOf('@')) 
       select new 
       { 
        Name = name, 
        Email = email 
       }; 
+0

Oui Bruno Conde, ça marche bien. – udana

+0

Merci. La barre de défilement apparaît vers le bas. Quelqu'un s'il vous plaît l'éditer. – udana

1

Semble que vous voulez le Zip operator from .NET 4.0. Si vous ne pouvez pas attendre aussi longtemps, vous pouvez utiliser l'implémentation dans MoreLINQ.

Je ne suis pas sûr de savoir ce que vous voulez dire par rapport au mélange ... voulez-vous vraiment un couplage aléatoire? Si c'est le cas, il est probablement plus facile de mélanger un tableau en premier, puis de faire le zip.

+0

pas de sélection aléatoire. J'ai mélangé les e-mails []. Lors de la sélection, la recherche devrait sélectionner la bonne correspondance (match non désiré {Joss, Moss @ gmail.com} match désiré {Joss, Joss @ gmail.com} .Heur, il serait clair.Avoir fournir des informations si – udana

+1

Non, ce n'est pas encore très clair, ce qui représente une correspondance? Juste que l'adresse e-mail commence par le nom? –

+0

oui exactement, je suis curieux de savoir comment on peut l'utiliser avec MoreLinq. "Bruno conde" fourni la réponse.Je souhaite savoir comment pouvons-nous appliquer MoreLinq sur cela – udana

0

Ceci est l'opération Zip qui n'est pas disponible dans .NET 3.5 BCL prêt à l'emploi.

Si vous avez deux tableaux (ne fonctionnera pas pour IEnumerable<T> générique) de même longueur, vous pouvez utiliser:

var zippedArrays = Enumerable.Range(0, Math.Min(a.Length, b.Length)) 
          .Select(i => new { Name = a[i], Email = b[i] }) 
          .ToList(); 
+0

Cela fonctionne bien.Mais chaque nom doit correspondre à leur email associé (ici l'associé représente leur nom @ gmail) par exemple si le nom est Jossi a besoin de Joss @ gmail {"Joss", "Joss @ gmail"} dans le second tableau de chaînes (emails []) les emailids sont mélangés. – udana

Questions connexes