2009-05-28 10 views
26

Así que decir que tengo una colección de Bloops¿Seleccionar ciertas propiedades en otro objeto?

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

Entonces tengo una clase de Razzies

Class Razzie 
    Public FirstName 
    Public LastName 
End Class 

¿Es posible el uso de LINQ para seleccionar el nombre y apellido de todos los Bloops en la colección de Bloops y devuelve una colección de Razzies? ¿O estoy limitado a un For-Loop para hacer mi trabajo?

Para aclarar cualquier confusión, VB o C# funcionarán. También esto probablemente me llevará a plantearme la pregunta (¿qué pasa con el uso de una cláusula "Dónde")?

Respuesta

29

Esto debería hacer el trabajo:

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

Y si desea convertir el resultado de IEnumerable<Bloop> (lo que los LINQ devuelve la consulta) a una matriz o List<Bloop>, simplemente anexar una llamada a la ToArray() o ToList() métodos de extensión respectivamente.

Editar: Se corrigió el código para que ahora tenga una sintaxis VB.NET 9 válida.

+0

acepto cualquiera de los dos idiomas, ya que soy competente en ambos –

+1

Lo suficiente. Solo pensé que lo preferirías en VB.NET ya que en eso estaban tus muestras de código :) :) – Noldorin

+0

puedes editar tu publicación para que sea la sintaxis correcta de C#, ya que no es la sintaxis correcta de vb. de esa manera puedo entender mejor lo que está pasando. –

42
List<Bloop> myBloops = new List<Bloops>; 
//populate myRazzies 
List<Razzie> myRazzies = myBloops.Select(x => new Razzie() { FirstName = x.FirstName, LastName = x.LastName}).ToList(); 
+11

C# es una de las etiquetas que figuran en la pregunta. – KClough

0

Transformación de un tipo a otro se puede lograr mediante el uso de Enumerable.Select

De hecho, hay un sample de 101 muestras LINQ que muestra una consulta transformación de enteros en cadenas.

2
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); 
    } 
} 
0
 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"); 
Cuestiones relacionadas