web-dev-qa-db-fra.com

Linq sélectionner certaines propriétés dans un autre objet?

Alors dis que j'ai une collection de Bloops

Class Bloop
  Public FirstName
  Public LastName
  Public Address
  Public Number
  Public OtherStuff
End Class

Ensuite, j'ai une classe de Razzies

Class Razzie
  Public FirstName
  Public LastName
End Class

Est-il possible d’utiliser Linq pour sélectionner le prénom et le nom parmi tous les objets Bloops de la collection Bloops et renvoyer une collection de Razzies? Ou suis-je limité à une boucle For-Loop pour faire mon travail?

Pour dissiper toute confusion, VB ou C # fera l'affaire. De plus, cela me mènera probablement à la question de (Qu'en est-il de l'utilisation d'une clause "Où").

26
Russ Bradberry

Cela devrait faire le travail:

Dim results = From item In bloops _
              Select New Razzie() With _
              { _
                  .FirstName = item.FirstName, _
                  .LastName = item.LastName _
              }

Et si vous souhaitez convertir le résultat de IEnumerable<Bloop> (ce que renvoie la requête LINQ) en un tableau ou en List<Bloop>, ajoutez simplement un appel aux méthodes d'extension ToArray() ou ToList(), respectivement.

Modifier: le code a été corrigé pour que sa syntaxe VB.NET 9 soit maintenant valide.

29
Noldorin
List<Bloop> myBloops = new List<Bloops>;
//populate myRazzies
List<Razzie> myRazzies = myBloops.Select(x => new Razzie() { FirstName = x.FirstName, LastName = x.LastName}).ToList();
42
KClough
public void Linq9()
{
    string[] words = { "Apple", "BlUeBeRrY", "cHeRry" };

    var upperLowerWords =
        from w in words
        select new { Upper = w.ToUpper(), Lower = w.ToLower() };

    foreach (var ul in upperLowerWords)
    {
        Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower);
    }
}
2
nologo
        C# Sample - Thanks to earlier posters.

        List<clsObj> myList = new List<clsObj>();
        clsObj clsObjInstance = null;
        for (int i = 0; i < 10; i++)
        {
            clsObjInstance = new clsObj() { x = (i+1) % 3, a = "A" + i.ToString() };
            myList.Add(clsObjInstance);
        }

        List<int> extIntList = myList.Select(u => u.x).ToList();
        foreach (int u in extIntList)
            Console.Write(u.ToString() + "\t");

        List<string> extStringList = myList.Select(u => u.a).ToList();
        foreach (string u in extStringList)
            Console.Write(u + "\t");
0
Md Saidul Karim

Vous pouvez transformer un type en un autre en utilisant Enumerable.Select

En fait, il existe un échantillon à partir de 101 exemples linq qui montre une requête transformant des entiers en chaînes.

0
Amy B