using System.Linq.Expressions;
using System.Collections.Generic;
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).Top(10));
System.Console.WriteLine(cn.GetScript(query) + "\n");
foreach (var row in cn.Sql(query).Read())
System.Console.WriteLine(string.Join(", ", from x in row.ToArray() select x.ToString().TrimEnd()));
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;}
public List<OrderDetails> Details {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);