Left Outer Joins via Linq To Entities über Entity Framework mit Where-Klausel
Ich habe alle posts gelesen bezüglich der Umsetzung der äquivalent zu einem LEFT OUTER JOIN in Linq to Entities - (.NET 3.5) bei der Verwendung des Entity Framework, haben aber noch eine Lösung zu finden für Folgendes problem.
Gegeben zwei Tabellen, vertreten durch die Objekte unter:
public class Foo
{
public int FooId; //primary key
public string Name;
}
public class Bar
{
public int BarId; //primary key
public int FooId; //foreign key
public string Desc;
}
Brauche ich zum erstellen eines Linq to Entities-Anweisung ENTSPRICHT der folgenden SQL-Anweisung. Beachten Sie, dass die WHERE-Anweisung enthält zwei ODER würd Bedingungen, die span beiden Tabellen, und die Verwendung des DISTINCT-qualifier.
SELECT DISTINCT
Foo.*
FROM
Foo
LEFT OUTER JOIN Bar ON Foo.FooId = Bar.FooId
WHERE
(Foo.Name = 'fooname' OR Bar.Desc = 'bardesc')
Wird die Linq-Abfrage, die ich bin, zu generieren, ist Linq to Entities über Entity Framework, und wird (hoffentlich) generieren Sie eine einzelne SQL-Anweisung zur Ausführung an den server. Linq to Entities nicht unterstützt FirstOrDefault() extension-Klausel, also die standard-Linq-syntax für LINKS-OUTER-JOINs werden nicht funktionieren.
Hier ist die Lösung, die ich habe, SO WEIT, aber ich bin nicht in der Lage zu tun, eine der folgenden:
1) Generieren eines ResultSet enthält das set der Foo/Bar Kombinationen, die würde zurückgegeben werden, die von der LEFT-OUTER-JOIN-operation.
2) Umsetzung entspricht der WHERE-Klausel: WHERE (Foo.Name = 'fooname' OR Bar.Desc = 'bardesc')
private class JoinSet
{
public Foo Foo;
public IQueryable<Bar> Bars;
};
private class FooBar
{
public Foo Foo;
public Bar Bar;
};
IEnumerable<Foo> OuterJoinTest()
{
IQueryable<Foo> fooBaseQuery = dbContext.FooSet;
IQueryable<Bar> barBaseQuery = dbDontext.BarSet;
IQueryable<JoinSet> joinQuery =
from foo in fooBaseQuery
select new JoinSet
{
Foo = foo,
Bars = barBaseQuery.Where(bar => bar.FooId == foo.FooId)
};
//How do I generate a result set containing FooBar objects ?
//How or where do I insert the equivalent of: ?
// WHERE (Foo.Name = 'fooname' OR Bar.Description = 'bardesc')
IQueryable<Foo> resultQuery =
from joinSet in joinQuery
select joinSet.Foo;
resultQuery = resultQuery.Distinct();
return resultQuery.ToList();
}
Jede Hilfe, Vorschläge oder Ideen würde geschätzt.
EulerOperator
Du musst angemeldet sein, um einen Kommentar abzugeben.
.NET 3.5
.NET 4.0