This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var query2 = context.Person | |
.LeftJoin(context.Pet, | |
person => person, | |
pet => pet.Owner, | |
row => new { row.Outer.FirstName, row.Outer.LastName, PetName = row.Inner.Name }); |