Ich habe ein Ansichtsmodell (unten).So erstellen Sie Ansichtsmodell, ohne Sammlungen im Speicher zu sortieren
public class TopicsViewModel
{
public Topic Topic { get; set; }
public Reply LastReply { get; set; }
}
Ich möchte eine IQueryable<TopicsViewModel>
mit Werten aus meiner IQueryable<Topic>
Sammlung und IQueryable<Reply>
Sammlung füllen. Ich möchte nicht die angefügte Entitätssammlung (dh Topic.Replies) verwenden, da ich nur die letzte Antwort für dieses Thema möchte und dazu tue, dass Topic.Replies.Last() die gesamte Entitätssammlung in den Arbeitsspeicher lädt und dann die letzte in der Liste. Ich versuche, in IQueryable zu bleiben, damit die Abfrage in der Datenbank ausgeführt wird.
Ich möchte auch nicht durch Themen foreach und replyRepository.Replies abfragen, da das Durchlaufen von IQueryable<Topic>
das verzögerte Laden beginnt. Ich würde es vorziehen, einen Ausdruck zu bilden und alle Beinarbeit in den unteren Schichten erledigen zu lassen.
Ich habe folgendes:
IQueryable<TopicsViewModel> topicsViewModel = from x in topicRepository.Topics
from y in replyRepository.Replies
where y.TopicID == x.TopicID
orderby y.PostedDate ascending
select new TopicsViewModel { Topic = x, LastReply = y };
Aber das funktioniert nicht. Irgendwelche Ideen, wie ich ein IQueryable oder IEnumerable von TopicsViewModel auffüllen kann, damit es die Datenbank abfragt und Themen und die letzte Antwort des Themas ergreift? Ich versuche wirklich, alle Antworten zu diesem Thema zu vermeiden. Ich möchte nur die letzte Antwort holen.
Vielen Dank für Ihre Einblicke.
Gibt es eine Navigationseigenschaft zwischen Themen und Antworten? –
Ja, das ist die beigefügte Entitätssammlung, von der ich gesprochen habe. Ich möchte jedoch nicht auf diese Navigationseigenschaft zugreifen und das verzögerte Laden dieser gesamten Sammlung auslösen. Wenn ich alle Elemente in dieser Sammlung benötige, wäre das sinnvoll, aber da ich nur das letzte Element in dieser Sammlung benötige, wäre es besser, irgendwie in IQueryable zu bleiben. – Chev
Wenn Sie sagen "funktioniert nicht", welcher Teil funktioniert nicht? Laufzeitfehler, nichts zurückgegeben oder alles zurückgegeben ..? –