Csharp/C Sharp/LINQ/Nested Query

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

an untidy nested query

<source lang="csharp"> using System; using System.Collections.Generic; using System.Linq; public class MainClass {

   public static void Main() {
       string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };
       IEnumerable<string> query =
         Enumerable.Select(
           Enumerable.OrderBy(
             Enumerable.Where(
               names, n => n.Contains("a")
             ), n => n.Length
           ), n => n.ToUpper()
         );
   }

}

</source>


Nested query list

<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Linq; using System.Reflection; class Person {

   int _id;
   int _idRole;
   string _lastName;
   string _firstName;
   public int ID {
       get { return _id; }
       set { _id = value; }
   }
   public int IDRole {
       get { return _idRole; }
       set { _idRole = value; }
   }
   public string LastName {
       get { return _lastName; }
       set { _lastName = value; }
   }
   public string FirstName {
       get { return _firstName; }
       set { _firstName = value; }
   }

} class Role {

   int _id;
   string role;
   public int ID {
       get { return _id; }
       set { _id = value; }
   }
   public string Role {
       get { return role; }
       set { role = value; }
   }

} class Program {

   static void Main(string[] args) {
       List<Person> people = new List<Person> {
              new Person { ID = 1, IDRole = 1, LastName = "A", FirstName = "B"},
              new Person { ID = 2, IDRole = 2, LastName = "G", FirstName = "T"},
              new Person { ID = 3, IDRole = 2, LastName = "G", FirstName = "M"},
              new Person { ID = 4, IDRole = 3, LastName = "C", FirstName = "G"}
           };
       List<Role> roles = new List<Role> {
              new Role { ID = 1, Role = "Manager" },
              new Role { ID = 2, Role = "Developer" }
           };
       var query = people
                   .Where(p => p.ID == 1)
                   .SelectMany(p => roles
                                   .Where(r => r.ID == p.ID)
                                   .Select(r => new { p.FirstName, p.LastName, r.Role }));
   }

}

</source>