Skip to content

Instantly share code, notes, and snippets.

@andrew-t-moore
andrew-t-moore / TestContext.cs
Created September 3, 2012 11:08
TestContext
public class Person {
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Pet {
public int Id { get; set; }
public string Name { get; set; }
public Person Owner { get; set; }
var query = context.Person
.GroupJoin(context.Pet,
person => person,
pet => pet.Owner,
(person, pets) => new { person, pets = pets.DefaultIfEmpty() })
.SelectMany(group => group.pets,
(row, pet) => new { row.person.FirstName, row.person.LastName, PetName = pet.Name });
@andrew-t-moore
andrew-t-moore / LeftJoinExtension.cs
Created September 3, 2012 12:00
Left join extension method
public static class QueryableExtensions {
public static IQueryable<TResult> LeftJoin<TOuter, TInner, TKey, TResult> (
this IQueryable<TOuter> outer,
IQueryable<TInner> inner,
Expression<Func<TOuter, TKey>> outerKeySelector,
Expression<Func<TInner, TKey>> innerKeySelector,
Expression<Func<JoinResult<TOuter, TInner>, TResult>> resultSelector) {
var result = outer
.GroupJoin(inner, outerKeySelector, innerKeySelector, (outer1, inners) => new { outer1, inners = inners.DefaultIfEmpty() })
.SelectMany(row => row.inners, (row, inner1) => new JoinResult<TOuter, TInner> { Outer = row.outer1, Inner = inner1 })
@andrew-t-moore
andrew-t-moore / FluentQueryForTestContext2.cs
Created September 3, 2012 12:13
Fluent syntax query 2
var query2 = context.Person
.LeftJoin(context.Pet,
person => person,
pet => pet.Owner,
row => new { row.Outer.FirstName, row.Outer.LastName, PetName = row.Inner.Name });