Cela peut ne pas vous satisfaire parce que les objets ne sont pas correctement aplaties, mais vous pouvez effectuer une jointure externe et retourner une collection de types anonymes.
Une jointure externe gauche est identique à l'union de la jointure interne et de l'ensemble except (la partie du premier ensemble qui ne se joint pas au second ensemble).
Ici, je simplement
- calculer la jointure interne
- l'exception Calculons ensemble (création d'une entité vide B pour assurer les types sont compatibles)
- combinons les deux ensembles.
Le LINQ n'est pas beau, mais il est mignon.
class A
{
public int Id { get; set; }
public string PropertyA { get; set; }
}
class B
{
public int Id { get; set; }
public string PropertyB { get; set; }
}
var aThings = new List<A>();
var bThings = new List<B>();
var innerJoin = aThings.SelectMany(a =>
bThings.Where(b => a.Id == b.Id).Select(b => new { a, b })).ToList();
var exceptSet = aThings.Where(a =>
!bThings.Select(b => b.Id).Contains(a.Id)).Select(a =>
{
B b = new B();
return new { a, b };
});
var outerJoin = innerJoin;
outerJoin.AddRange(exceptSet);
Le résultat est une liste de types anonymes {a, b}
Linq-à-entités ne prennent pas en charge DefaultIfEmpty. Ainsi, Visual Studio 2008 n'obtiendra pas .NET 4? – Alex
http://stackoverflow.com/questions/998090/can-i-use-net-4-0-beta-in-visual-studio-2008 –
Entity Framework ne supporte pas DefaultIfEmpty(), donc ce cose ne fonctionne pas . -1 – Lucas