Bueno, ha sido un tiempo y he estado trabajando con algunas cosas realmente interesantes últimamente.
Pensé que iba a compartir esta práctica tres veces al día poco de información para hacer su vida más fácil en. NET específicamente C #.
¿Cuántas veces has colocado en una lista en busca de propiedades de la clase correspondiente, y añadió que otra lista para mostrarlas? Bueno, yo sé lo he hecho paso a veces por lo que cuando empecé a usar expresiones LINQ y lambda Tengo mucha ilusión!
Ok, así sin más hacer una suelta.
Digamos que tenemos una clase base
public class Person{
public String FirstName{get;set;}
public String LastName{get;set;}
public String Email{get;set;}
}
- public class Person{
- public String FirstName{get;set;}
- public String LastName{get;set;}
- public String Email{get;set;}
- }
Ahora da un método que rellena una lista de objetos Person
var myList = new List<Person>();
for(int i = 0; i < 10; i++){
myList.Add(
//Excuse the concatination, prefered method is String.Format
new Person{FirstName = "Name [1]" + 1, LastName = "LastName " + [1], Email = "Email" + i + "@domain.com"};
)
}
- var myList = new List<Person>();
- for(int i = 0; i < 10; i++){
- myList.Add(
- //Excuse the concatination, prefered method is String.Format
- new Person{FirstName = "Name [1]" + 1, LastName = "LastName " + [1], Email = "Email" + i + "@domain.com"};
- )
- }
Ahora tenemos una lista de la Persona con 10 entradas. Ahora bien, si queríamos encontrar la entrada con el nombre "Nombre 1" usted tradicionalmente recorrer la lista hasta que acertaron el nombre. Algo como
var myPerson = null;
foreach(var person in myList){
if(myList.FirstName.Equals("Name 1")){
myPerson = person;
break;
}
}
- var myPerson = null;
- foreach(var person in myList){
- if(myList.FirstName.Equals("Name 1")){
- myPerson = person;
- break;
- }
- }
El hombre que puede ser molesto. Así que MS nos ha provisto de un práctico conjunto de método de extensión en la biblioteca de LINQ. Para incluir en tu CS de presentar simplemente la referencia del espacio de nombres System.Linq
Ahora, para lograr lo mismo que el bucle foreach que sólo tiene que ir
//The first or default method returns null if it doesn't find a match, First() will throw an exception if no
//matching objects are found
var myPerson = myList.FirstOrDefault(person => person.FirstName.Equals("Name 1"));
- //The first or default method returns null if it doesn't find a match, First() will throw an exception if no
- //matching objects are found
- var myPerson = myList.FirstOrDefault(person => person.FirstName.Equals("Name 1"));
Ahora que está limpio!
Podemos también las listas de consulta de la lista
//Obviously this will return all ten results but illustrates the purpose
var myNewList = myList.Where(person => person.FirstName.StartsWith("Name "));
- //Obviously this will return all ten results but illustrates the purpose
- var myNewList = myList.Where(person => person.FirstName.StartsWith("Name "));
Fresco ¿eh? Pero esto es sólo el principio! Digamos que agregar otra propiedad a otra.
public class Person{
public String FirstName{get;set;}
public String LastName{get;set;}
public String Email{get;set;}
public int Salary {get;set;} //yes I know, float float float -> keeping it simple
}
- public class Person{
- public String FirstName{get;set;}
- public String LastName{get;set;}
- public String Email{get;set;}
- public int Salary {get;set;} //yes I know, float float float -> keeping it simple
- }
y lo pueblan con
var myList = new List<Person>();
Random random = new Random();
int randomNumber = random.Next(0, 100);
for(int i = 0; i < 10; i++){
myList.Add(
//Excuse the concatination, prefered method is String.Format
var salary = random.Next() * 1;
new Person{FirstName = "Name [1]" + 1, LastName = "LastName " + [1], Email = "Email" + i + "@domain.com", Salary = salary};
)
}
- var myList = new List<Person>();
- Random random = new Random();
- int randomNumber = random.Next(0, 100);
- for(int i = 0; i < 10; i++){
- myList.Add(
- //Excuse the concatination, prefered method is String.Format
- var salary = random.Next() * 1;
- new Person{FirstName = "Name [1]" + 1, LastName = "LastName " + [1], Email = "Email" + i + "@domain.com", Salary = salary};
- )
- }
Y queremos encontrar el costo total de la Lista de Personas
var total = myList.Sum(person => person.Salary);
¿O queremos encontrar a la media de todos los salarios
var avg = myList.Avg(person => person.Salary);
Ahora no me importa quién eres, que es cool.It se extiende mucho más allá de eso, así que recomiendo echar un vistazo!
Para ver más información de
Lambda expresiones:
http://msdn.microsoft.com/en-us/library/bb397687.aspxLinq
http://msdn.microsoft.com/en-us/netframework/aa904594Disfrute!