linq2db
linq2db copied to clipboard
SQL CASE WHEN THEN
Cannot create a CASE WHEN THEN similar to https://stackoverflow.com/questions/936028/linq-case-statement
Here is my Linq2Db example
public class MyProjection
{
public Car Car {get;set;}
public Tyre Tyre {get;set;}
}
public class Linq2DbPlayground
{
public void Start()
{
var context = new DataConnection(new SQLiteDataProvider(ProviderName.SQLiteClassic), "Data Source=:memory:");
context.CreateTable<Car>();
context.CreateTable<Tyre>();
context.CreateTable<Group>();
context.CreateTable<CarTyreMapping>();
context.CreateTable<Brand>();
var fluentMappingBuilder = context.MappingSchema.GetFluentMappingBuilder();
var brandBuilder = fluentMappingBuilder.Entity<Brand>();
brandBuilder.Property(x => x.Id).IsPrimaryKey();
brandBuilder.Association(x => x.Groups, x => x.Id, x => x.BrandId);
var groupBuilder = fluentMappingBuilder.Entity<Group>();
groupBuilder.Property(x => x.Id).IsPrimaryKey();
groupBuilder.Association(x => x.Cars, x => x.Id, x => x.GroupId);
groupBuilder.Association(x => x.Brand, x => x.BrandId ,x => x.Id);
var carBuilder = fluentMappingBuilder.Entity<Car>();
carBuilder.Property(x => x.Id).IsPrimaryKey();
carBuilder.Association(x => x.Group, x => x.GroupId, x => x.Id);
var tyreHistoryMappingBuilder = fluentMappingBuilder.Entity<CarTyreMapping>();
var tyreBuilder = fluentMappingBuilder.Entity<Tyre>();
tyreBuilder.Property(x => x.Id).IsPrimaryKey();
context.Insert(new Car { Id = 1, Name = "MyCar", IsSet = true });
context.Insert(new Car { Id = 2, Name = "Bla" });
context.Insert(new Group { Id = 1, Name = "group 1", IsSet = false });
context.Insert(new Tyre { Id = 1, Name = "MyTyre", CarId = 1 });
context.Insert(new CarTyreMapping { CarId = 1, TyreId = 1, Time = DateTime.UtcNow.AddDays(-2) });
var carTable = context.GetTable<Car>();
var tyreTable = context.GetTable<Tyre>();
var query = (from car in carTable
from tyre in tyreTable.Where(x => x.CarId == car.Id) select new MyProjection{
Car = car,
Tyre = tyre
});
var res = query.Select(x => new {a = x.Car.Id == 3 ? x.Car.Name : string.Empty});
var lastQuery = context.LastQuery;