using NMemory.StoredProcedures;
using System.Collections.Concurrent;
public static void Main()
MyDatabase myDatabase = new MyDatabase();
myDatabase.Groups.Insert(new Group() { Id = 1, Name = "Group_1"});
myDatabase.Groups.Insert(new Group() { Id = 2, Name = "Group_2"});
myDatabase.Members.Insert(new Member() { Id = 1, GroupId = 1, Name = "It's Member_1" });
myDatabase.Members.Insert(new Member() { Id = 2, Name = "It's Member_2" });
IQueryable<Group> query =
myDatabase.Groups.Where(g => g.Id > new Parameter<int>("param1") + new Parameter<long?>("param2"));
var procedure = myDatabase.StoredProcedures.Create(query);
var parameters = new ConcurrentDictionary<string, object>();
parameters.GetOrAdd("param1", 1);
parameters.GetOrAdd("param2", (long?)0);
FiddleHelper.WriteTable("All Members", procedure.Execute(parameters).ToList());
public class MyDatabase : Database
var members = this.Tables.Create<Member, int>(x => x.Id);
var groups = base.Tables.Create<Group, int>(g => g.Id);
RelationOptions options = new RelationOptions(
var peopleGroupIdIndex = members.CreateIndex(
new RedBlackTreeIndexFactory(),
this.Tables.CreateRelation(
public ITable<Member> Members { get; private set; }
public ITable<Group> Groups { get; private set; }
public int Id { get; set; }
public string Name { get; set; }
public int? GroupId { get; set; }
public int Id { get; set; }
public string Name { get; set; }