CSharp · Console
// Entity Framework Extensions
// Doc: https://entityframework-extensions.net/where-bulk-contains
// @nuget: Newtonsoft.Json
// @nuget: Microsoft.EntityFrameworkCore.SqlServer
// @nuget: Z.EntityFramework.Extensions.EFCore
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
// Doc: https://entityframework-extensions.net/where-bulk-contains
SeedDatabase();
var deserializedCustomers = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Customer>>(GetSerializedCustomers());
FiddleHelper.WriteTable("1 - DeserializedCustomers", deserializedCustomers);
using (var context = new EntityContext())
{
// You can specify a custom `JOIN` clause with one or many properties using a `Lambda Expression`
var customers = GetFromGenericContains(deserializedCustomers);
FiddleHelper.WriteTable("3 - WhereBulkNotContains + Lambda Expression", customers);
}
}
public static List<T> GetFromGenericContains<T>(List<T> items) where T : class
{
using (var context = new EntityContext())
{
return context.Set<T>().WhereBulkContains(items, new List<string> { "Code" }).ToList();
}
}
public static void SeedDatabase()
{
using (var context = new EntityContext())
{
var list = new List<Customer>();
for (int i = 0; i < 5; i++)
{
list.Add(new Customer() { Code = "Original_" + i, Email = "Original_" + i, FirstName = "Original_" + i, LastName = "Original_" + i });
}
context.BulkInsert(list);
}
}
public static string GetSerializedCustomers()
{
var customers = new List<Customer>();
for (int i = 0; i < 3; i++)
{
customers.Add(new Customer() { CustomerID = i + 1, Code = "Original_" + i, Email = "Updated_" + i, FirstName = "Updated_" + i, LastName = "Updated_" + i });
}
return JsonConvert.SerializeObject(customers);
}
public class EntityContext : DbContext
{
static EntityContext()
{
using (var context = new EntityContext())
{
context.Database.EnsureCreated();
}
}
public DbSet<Customer> Customers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()));
base.OnConfiguring(optionsBuilder);
}
}
[Table("Customer")]
public class Customer
{
public int CustomerID { get; set; }
public string Code { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
}