Here's a little bit on using Linq and the ways to get data out via Eager / Lazy loading and LINQ methods vs operators. The explanations are in the code comments below.
using System.Data.Entity;
using System.Linq;
using EFFundamental;
namespace ConsoleApplication1
{
class Program
{
// How to query against entity data model
static void Main(string[] args)
{
LinqOperatorLazyLoading();
LinqOperatorEagerLoading();
LinqMethods();
ProjectionQuery();
}
// using LINQ operator
// Lazy loading = fetch only main data and have to make subsequent calls to get related data.
// Use when you know related data is not required at all or at the time of the call.
private static void LinqOperatorLazyLoading()
{
var context = new CHEntities();
var query = from c in context.council_member
where c.end_dtm != null
select c;
var result = query.ToList();
// note Lazy loading is by default, on. If you want to change this..
// context.ContextOptions.LazyLoadingEnabled = false;
}
// using LINQ operator
// Eager loading = explicitly fetching all the data related in one call.
// Good if all your stuff is not too large or you are unsure of what pieces of data you will need.
// If it is a large amount of data.. slower but more complete.
private static void LinqOperatorEagerLoading()
{
var context = new CHEntities();
var query = from c in context.council_member.Include("address") // the .Include is what makes it Eager loading (these are the "extra" objects )
.Include(x => x.council_lku) // to use lambdas, make sure to add: using System.Data.Entity;
where c.end_dtm != null
select c;
var result = query.FirstOrDefault();
}
// using LINQ methods .WHERE etc..
private static void LinqMethods()
{
var context = new CHEntities();
var result = context.Compliance_Notes.Where(x => x.last_updated_by == "ctenn").ToList();
}
private static void ProjectionQuery()
{
var context = new CHEntities();
var query = from c in context.council_member.Include("address")
where c.end_dtm != null
// anonymous type and 2 of its properties. new object selecting only the properties you want.
select new
{
c.branch,
c.end_dtm
};
}
}
}
