3 ms·
In linq (C#) IEnumerable<User> getExpiredUsers(DbSet<User> users) => users.Where(u => u.ExpiresAt < DateTime.UtcNow); Such simple logical expressi
by shortrounddev2 11mo ago
In linq (C#)
IEnumerable<User> getExpiredUsers(DbSet<User> users)
=> users.Where(u => u.ExpiresAt < DateTime.UtcNow);
Such simple logical expressions (called expression trees) get converted to SQL queries
- ryanrasti 11mo agoThe is exactly the way forward: encapsulation (the function), type safety, and dynamic/lazy query construction. I'm building a new project, Typegres, on this same philosophy for the modern web stack (TypeScript/PostgreSQL). We can take your example a step further and blur the lines between database columns and computed business logic, building the "functional core" right in the model: // This method compiles directly to a SQL expression class User extends db.User { isExpired() { return this.expiresAt.lt(now()); } } const expired = await User.where((u) => u.isExpired()); Here's the playground if that looks interesting: https://typegres.com/play/ https://typegres.com/play/
- quails8mydog 11mo agoAnd anyone who calls that method may find themselves dealing with the implementation details of Entity Framework and whatever db provider you're using because it's a leaky abstraction.