Skip to content

Instantly share code, notes, and snippets.

@andrew-t-moore
Created September 3, 2012 12:00
Show Gist options
  • Save andrew-t-moore/3608829 to your computer and use it in GitHub Desktop.
Save andrew-t-moore/3608829 to your computer and use it in GitHub Desktop.
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 })
.Select(resultSelector);
return result;
}
public class JoinResult<TOuter, TInner> {
public TOuter Outer { get; set; }
public TInner Inner { get; set; }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment