using System.Collections.Generic;
using System.Data.Entity;
using System.Linq.Dynamic.Core;
public static void Main()
var context = new EntityContext();
var oftypeWorker = context.Employees.OfType(typeof(Worker));
FiddleHelper.WriteTable(oftypeWorker);
string boss = typeof(Boss).FullName;
var oftypeBoss = context.Employees.OfType(boss);
FiddleHelper.WriteTable(oftypeBoss);
int numberOfBosses = context.Employees.Count("is(@0)", boss);
Console.WriteLine("numberOfBosses = {0}", numberOfBosses);
int useAsToCheckIftheTypeIsABoss = context.Employees.Count("As(@0) != null", boss);
Console.WriteLine("useAsToCheckIftheTypeIsABoss = {0}", useAsToCheckIftheTypeIsABoss);
var allWorkers = context.Employees.OfType(typeof(Worker));
var castToWorkers = allWorkers.Cast(typeof(Worker));
FiddleHelper.WriteTable(castToWorkers);
public static void GenerateData()
var list = new List<BaseEmployee>
new Worker { Name = "w1", Other = "o1" },
new Worker { Name = "w2", Other = "02" },
new Boss { Name = "b", Function = "f" }
using (var context = new EntityContext())
context.Employees.AddRange(list);
context.BulkSaveChanges();
public class EntityContext : DbContext
public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
public DbSet<BaseEmployee> Employees { get; set; }
public abstract class BaseEmployee
public int Id { get; set; }
public string Name { get; set; }
public class Boss : BaseEmployee
public string Function { get; set; }
public class Worker : BaseEmployee
public string Other { get; set; }
public int Id { get; set; }
public int Amount { get; set; }
public double Price { get; set; }
public int Id { get; set; }
public string Name { get; set; }
public string CompanyName { get; set; }
public string City { get; set; }
public string Phone { get; set; }