C# 3.0 és a LINQ projekt

C# 3.0 és a LINQ projekt
2005-09-30T23:04:04+02:00
2005-10-01T00:30:04+02:00
2022-10-31T15:10:42+01:00
  • De nekem úgy tűnik, hogy a lekérdezésekhez a többi képességre is szükség van. Legalábbis az implicit típusokra biztos, mert anélkül nehéz lenne selectálni. De akkor már kell az objektuminicializáló, hogy a kiválasztott oszlopok értéket kapjanak. A feltétetelek megoldhatók anonim delegaciókkal 2.0-ban, de mindenhol ki kell írni a típust.
    Valóban lehet dinamikus kódot csinálni, erre hirtelen nem gondoltam.
    Mutasd a teljes hozzászólást!
  • egységes SQL-szerű lekérdezéseket mind adatbázisra, XML-re, és objektumokra. Ez azt tenné lehetővé, hogy az adatbázist típusosan érjük el, már fordításidőben elvileg

    Ezt tudtommal a C# 2.0 illetve az MS SQL Server 2005 már tudja, ugyan nem azzal a szintaxissal, mint ami a doksiban van, de szoros az együttműködés.

    Azért én azt hiszem, hogy ez a fajta nyelvbe ágyazás csökkenti a rugalmasságot, hiszen így nem lehet lekérdezést összerakni darabokból dinamikusan.

    Most is össze lehet rakni dinamikus programkódot, szóval ez nem hinném, hogy akadály. Ld. System.CodeDom, System.CodeDom.Compiler.

    A lekérdezésekről csak annyit, nem hinném, hogy ragaszkodni kéne az SQL-hez. Azt kibanehéz helyesen feldolgozni. Az XPath vagy a "mire fordul le" szövegek sokkal logikusabbnak néznek ki.
    Vagyis ez:
    customers.Where(c => c.City == "London").Select(c => c.Name)
    Mutasd a teljes hozzászólást!
  • Nemrég találkoztam ezzel a két szorosan egymáshoz kötődő dologgal. Itt a Prog.Hu-n nem láttam ezzel kapcsolatban semmit, talán érdemes róla beszéni, mégha a C# 2.0 sem jött még ki .
    A C# 3.0 lehetővé tenné meglévő osztályok kiterjesztését, funkcionális programozást, anonimusz típusokat, automatikus típusfelderítést, objektum-, és kollekcióinicializálókat, kifejezésfákat, és egységes SQL-szerű lekérdezéseket mind adatbázisra, XML-re, és objektumokra. Ez azt tenné lehetővé, hogy az adatbázist típusosan érjük el, már fordításidőben elvileg.
    A LINQ igazából a 'Language INtegrated Query', amely a többi fejlesztést felhasználva lehetővé teszi, hogy SQL-szerű de típusbiztos lekérdezéseket írjunk majd a programkódba. Szinte minden SQL képességet támogat.

    Itt van egykét példa:
    Automatic type inference: var i = 5; var s = "Hello"; var d = 1.0; var numbers = new int[] {1, 2, 3}; var orders = new Dictionary<int,Order>(); Lambda Expression: x => x + 1 // Implicitly typed, expression body x => { return x + 1; } // Implicitly typed, statement body (int x) => x + 1 // Explicitly typed, expression body (int x) => { return x + 1; } // Explicitly typed, statement body (x, y) => x * y // Multiple parameters () => Console.WriteLine() // No parameters delegate R Func<A,R>(A arg); Func<int,int> f1 = x => x + 1; // Ok Func<int,double> f2 = x => x + 1; // Ok Func<double,int> f3 = x => x + 1; // Error static Z F<X,Y,Z>(X value, Func<X,Y> f1, Func<Y,Z> f2) { return f2(f1(value)); } double seconds = F("1:15:30", s => TimeSpan.Parse(s), t => t.TotalSeconds); Object initializer: var r = new Rectangle { P1 = new Point { X = 0, Y = 1 }, P2 = new Point { X = 2, Y = 3 } }; Collection initialzer: List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Anonymus types: var p1 = new { Name = "Lawnmower", Price = 495.00 }; var p2 = new { Name = "Shovel", Price = 26.95 }; p1 = p2; Implicit array type: var c = new[] { "hello", null, "world" }; // string[] var d = new[] { 1, "one", 2, "two" }; // Error Query: from c in customers where c.City == "London" select c.Name from c in customers orderby c.Country, c.Balance descending select new { c.Name, c.Country, c.Balance } from c in customers where c.City == "London" from o in c.Orders where o.OrderDate.Year == 2005 select new { c.Name, o.OrderID, o.Total } Expression tree: Func<int,int> f = x => x + 1; // Code Expression<Func<int,int>> e = x => x + 1; // Data


    Itt egy doksi: C# 3.0 specification
    Itt meg egy video: LINQ Demo

    Azért én azt hiszem, hogy ez a fajta nyelvbe ágyazás csökkenti a rugalmasságot, hiszen így nem lehet lekérdezést összerakni darabokból dinamikusan. Persze ez nem mindig kell. Más területeken is jól jön, pl. egy kollekción bonyolult szűrést végezni gyorsan (már kódolásban, futásidő nem biztos, hogy jobb), vagy majd jön a WINFX, és majd akkor a fájlokat, hardvereszközöket SQL lekérdezésekkel lehet majd elérni. Alapból a lekérdezéseket az IEnumerable interfész tudja majd, de a mintát meg lehet valósítani tetszőleges objektumokra ha van értelme.
    Úgy tűnik a Datasetet is valami más váltja majd le.

    Kíváncsi lennék a ti véleményetekre is ezzel kapcsolatban.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd