Ich habe zwei SQL-Tabellen in meiner Datenbank. Hier werden sie als C# Klassen vertreten:Wie kann ich einen LINQ-Select erstellen, der ein untergeordnetes Objekt wie einen SQL-Outer-Join enthält?
public class Topic
{
public Topic()
{
this.SubTopics = new HashSet<SubTopic>();
}
public int TopicId { get; set; }
public string Name { get; set; }
public int Number { get; set; }
public virtual ICollection<SubTopic> SubTopics { get; set; }
}
public class SubTopic
{
public int SubTopicId { get; set; }
public int TopicId { get; set; }
public string Name { get; set; }
public virtual Topic Topic { get; set; }
}
ich diesen Code erstellt eine einfache Liste zu erhalten:
var result = db.SubTopics
.Select(s => new
{
TopicId = s.TopicId,
SubTopicId = s.SubTopicId,
TopicName = s.Topic.Name,
SubTopicName = s.Name
})
.ToListAsync();
Ergebnis hier aber es funktioniert nur, wenn ich ein Unterthema für jedes Thema haben:
Topic1 SubTopic1 abc def
Topic1 SubTopic2 ghi jkl
Topic2 SubTopic3 mno pqr
Topic3 SubTopic4 stu vwx
Topic3 SubTopic5 xxx yyy
ich möchte ein Ergebnis erhalten, wie dies der Suche nach den Fällen, in denen ich für jedes Thema keine Subtopic haben:
Topic1 SubTopic1 abc def
Topic1 SubTopic2 ghi jkl
Topic2 null mno null
Topic3 SubTopic4 stu vwx
Topic3 SubTopic5 xxx yyy
oder ein Ergebnis wie dieses, wenn gab es keine untergeordneten Themen überhaupt:
Topic1 null abc null
Topic2 null mno null
Topic3 null stu null
Kann mir jemand einen Rat geben, wie ich dies mit LINQ bekommen konnte. Ich nehme an, ich zum ersten Ziel wie diese benötigen würde:
var result = db.Topics
Aber ich bin nicht sicher, wie ich in den untergeordneten Themen hinzufügen und habe es für den Fall arbeiten, wo es manchmal keine passenden Unterthemen sind.
Mögliches Duplikat von [LEFT OUTER JOIN in LINQ] (http://stackoverflow.com/questions/3404975/left-outer-join-in-linq) – BenR