- mnohem lepší (produktivnější) než psát linq dotazy ve VS
- LINQ to Objects, LINQ to SQL, Entity Framework, LINQ to XML, Parallel LINQ
- C# 5.0 a Framework 4.x
- člověk hned vidí data, která dotaz vrací
- umí lambda výrazy i "klasický" dotazy (from usr in users ...)
- umí ukázat výsledný SQL dotaz (takže se dá např. zkopírovat do SQL manageru a podívat se na prováděcí plán)
- umí našeptávat
- umí pracovat se C# - takže je možné v něm simulovat kompletní např. IQueryable metody
- umí editovat data z dotazu
- umí ukládat do excelu
- rozumná cena (alespoň já zatím nelituji)

Od teď už mám LinQ trochu raději. Ne, že bych ho miloval - to ne (starý pes?), ale mám ho raději.

http://www.linqpad.net/

Ukázka kódu

Lze zkopírovat do editoru a spustit (F5)


public class Car
{
  public string Name; public string Color; public int ID;
}

public class Driver 
{
   public string Name;  public int CarID;
}

void Main()
{
  List<Car> myCars = new List<Car>();
  for (int i=1; i<=200; i++)
  {
    myCars.Add(new Car() {ID = i, Name = "Auto "+i.ToString()});
  }

  List<Driver> myDrivers = new List<Driver>(); 
  for (int i=1; i<=20; i++)
  {
     myDrivers.Add(new Driver(){Name = "karel "+i.ToString(), CarID = i});
  }

  // lambda join (with order, where and top):
  var dr = myCars
  	.Join(myDrivers
	  , car => car.ID // key
	  , driver => driver.CarID // key
	  , (Car, Driver) =>  new { car = Car, driver = Driver}) // select
	.Where(d => d.driver.CarID < 5)
	.OrderBy (c => c.car.Name )
	.Select (c => new { CarName = c.car.Name, DriverName = c.driver.Name })
	.Take(3)
	;
  
  // query (with same result as in lambda):
  var dr2 = (from car in myCars
                 join driver in myDrivers on car.ID equals driver.CarID
				 where driver.CarID < 5
				 orderby car.Name
   	         select new { CarName = car.Name, DriverName = driver.Name }).Take(3);
  
  
  // same result:
  dr2.Dump();
  dr.Dump();
}

Ukázka editoru

Projekty

podívejte se na mé další
reference
Elephant Logo