This article presents a simple example of querying with Linq and Extension Methods in Entity Framework (EF).
To set the EF, create a C# Console application. Then add the Package Manager Console from Tools:
Then run Install-Package EntityFramework in the Package Manager Console, selecting correctly the Default project. The EF libraries should appear in the references:
So, once the EF is added to the project we need to add a class for its tables. In our example, it would be one class only, as one table is quite enough:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using System; using System.Collections.Generic; namespace SomeDbProject { class Car { public int ID { get; set; } public string Model { get; set; } public decimal Price { get; set; } public string Origin { get; set; } public int Year { get; set; } public string GetModel(int value) { int modelDefined = value % 5; List carModels = new List { "Ferrari", "Porsche", "Lada", "Opel", "VW" }; return carModels[modelDefined]; } public string GetOrigin(int value) { int originDefined = value % 5; List carOrigin = new List { "Italy", "Sicily", "Russia", "Germany", "Bulgaria" }; return carOrigin[originDefined]; } public int GetYear(int value) { Random rnd = new Random(); return rnd.Next(1900+value, 2000 +value); } public decimal GetPrice(int value) { Random rnd = new Random(); return rnd.Next(value * 100, value * 1000); } public override string ToString() { return $"{ID} \t {Model} \t EUR {Price} \t {Origin} \t {Year}"; } } } |
This is how the connection String in App.Config looks like for MSSQLLocalDB:
1 |
LocalDb)\MSSQLLocalDB;initial catalog=SomeDbProject.DbContext;integrated security=True;" providerName="System.Data.SqlClient" /> |
The class SomeDBContext includes an inheritance from DbContext (coming from System.Data.Entity of EF). The reference of the Car class is needed, to inform EF that a table called Cars should be cretated. If it was a foreign key, it should have been virtual:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
namespace SomeDbProject { using System.Data.Entity; class SomeDbContext : DbContext { public SomeDbContext() : base("name=SomeDbProjectConnectionString") { Database.SetInitializer(new DropCreateDatabaseAlways()); } public DbSet Cars { get; set; } } } |
Finally, this is the StartUp class, which initializes the DB and creates 1000 units in the DB:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
using System; using System.Linq; namespace SomeDbProject { class StartUp { static void Main() { SomeDbContext context = new SomeDbContext(); for (int i = 0; i < 1000; i++) { Car newCar = new Car(); newCar.Model = newCar.GetModel(i); newCar.Origin = newCar.GetOrigin(i); newCar.Price = newCar.GetPrice(i); newCar.Year = newCar.GetYear(i); context.Cars.Add(newCar); } context.SaveChanges(); //LINQ Console.WriteLine("LINQ:\n"); var queryFerrari = from c in context.Cars where c.Model.Contains("Ferrari") orderby c.Price select c; foreach (Car myCar in queryFerrari) { Console.WriteLine(myCar); } //Extension method Console.WriteLine("\n\nExtentsion method:"); var queryBulgaria = context.Cars .Where(c => c.Origin.Contains("Bulgaria")) .OrderBy(c => c.Price); foreach (Car myCar in queryBulgaria) { Console.WriteLine(myCar); } } } } |
As you see LINQ and the extension method work both quite fast:
The GitHub code is here. Enjoy!