C#-ban vissza lehet fejteni a lambda kifejezéseket?
2017-04-12T23:41:37+02:00
2017-04-13T10:09:11+02:00
2022-07-21T14:06:42+02:00
  • Ha debuggolod a programot, és a lambda kifejezésre tesztel egy brakepoint-ot, és ráviszed a cursort, mint ha értéket akarnál megnézni, akkor ki fogja írni a teljes select kifejezést.
    Mutasd a teljes hozzászólást!
  • Az Abstract Syntax Tree-ről bővebben itt találhat leírást, ha erre gondoltál. :)
    Mutasd a teljes hozzászólást!
  • Ha a lambda parametered egy Expression<> tipusba csomagolod akkor nem magat a fuggvenyt hanem az AST-jet adja at. 
    Expression Class (System.Linq.Expressions)
    Mutasd a teljes hozzászólást!
  • Ha jól tudom az EntityFramework is ezt csinálja, hogy például ennek a kódnak a hatására:

    List<User> list = users.Where(x => x.Name == "teszt user").ToList();
    A háttérben ez a kérés fog menni az adatbázishoz: "select * from users where name='teszt user'"

    De valahogy nem áll össze a fejemben ez mert ha jól értelmezem akkor az EntityFramewok-nek a háttérben egy függvényt (Func<User,bool>) kellene visszafejtenie ahhoz, hogy értelmezhesse a feladatot. Meg pluszba még a függvény használhat függőségeket a helyi gépről amit sehogy se lehet kivitelezni, hogy sql lekérdezéssé alakuljon mint ebben a példában is:

    static bool ItCanGo(User user) { Console.WriteLine("{0};{1};", user.ID, user.Name); bool result = Console.ReadLine().ToLower() == "yes"; return result; } Func<User, bool> func = ItCanGo; List<User> list = users.Where(func).ToList();
    Most akkor hogy is van ez? A EF lekéri az összes elemet a users táblából ennek hatására?: users.Where(x => x.Name == "teszt user")
    Vagy visszafejti a kifejezést és ha függőséget talál akkor exception-t dob?
    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