using System.Linq.Expressions;
public static void Main()
Console.WriteLine("OrmDb v." + Odb.Version.ToString() + "\n");
using(var cn = new System.Data.SqlClient.SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) {
var t0 = new Orders().AsQueryable();
var t1 = new OrderDetails().AsQueryable();
var query = Odb.SQL.Select(x => x.From(t0)
.Fields(t0.EmployeeID, x[t0.OrderID].MAX().AS("LastOrderId"))
.GroupBy(t0.EmployeeID));
Console.WriteLine(cn.GetScript(query) + "\n");
var result = cn.Sql(query).Read();
FiddleHelper.WriteTable(result.ToDataTable());
public class Orders : Base
[Column(AutoIncrement=true)]public int? OrderID {get;set;}
[Column()]public int? CustomerID {get;set;}
[Column()]public int? EmployeeID {get;set;}
[Column()]public DateTime? OrderDate {get;set;}
[Column(DefaultValue = 1)]public int? ShipperID {get;set;}
protected override Expression<TableConfig> Config() =>
(x) => x.SetPrimaryKey(OrderID)
.AddIndex(CustomerID, OrderDate);
public class OrderDetails : Base
[Column()]public int? OrderDetailID {get;set;}
[Column()]public int? OrderID {get;set;}
[Column()]public int? ProductID {get;set;}
[Column()]public int? Quantity {get;set;}
protected override Expression<TableConfig> Config() =>
(x) => x.SetPrimaryKey(OrderDetailID);
public class Products : Base
[Column(AutoIncrement=true)]public int? ProductID {get;set;}
[Column()]public string ProductName {get;set;}
[Column()]public int? SupplierID {get;set;}
[Column()]public int? CategoryID {get;set;}
[Column()]public string Unit {get;set;}
[Column()]public decimal? Price {get;set;}
protected override Expression<TableConfig> Config() =>
(x) => x.SetPrimaryKey(ProductID);