2016-12-03 3 views
1

So habe ich die nächste Methode (die funktioniert), um eine Liste von claims plus seine observations zurückgeben. Ein Anspruch kann null oder viele Beobachtungen haben. Code funktioniert, aber ich fürchte, es ist ein Chaos, mit dem anonymen Typ und dann Parsing es in einen neuen Anspruchstyp, die Zählung.Holen Elternobjekt und seine Kinderzahl ohne anonymen Typ

Ich denke, vielleicht fehlt mir etwas, um die Unordnung der resultierenden SQL-Abfrage zu reduzieren, aber nicht herausfinden, was. Irgendeine Idee?

UPDATE

Wie gewünscht, hier ist der Anspruch und Beobachtungsklasse, ich bin zu viel Beziehung eines einfacher einfachen Entity-Code Ertste mit:

Anspruch

public class Claim 
{ 
    public Claim() 
    { 
     Observations = new List<Observation>(); 
    } 

    [Key] 
    public Guid ID { get; set; } 

    ... 

    public virtual ICollection<Observation> Observations { get; set; } 

    [NotMapped] 
    public int ObservationsCount { get; set; } 
} 

Beobachtung

public class Observation 
{ 
    public Observation() 
    { } 

    [Key] 
    public Guid ID { get; set; } 

    ... 

    public virtual Guid ClaimID { get; set; } 

    [ForeignKey("ClaimID")] 
    public virtual Claim Claim { get; set; } 
} 
+0

Sicher, die Beobachtungstabelle ist ziemlich komplex und teuer. Ich kann nicht alle Beobachtungsdaten für jeden Anspruch mit einem Select und 'Include' laden. –

+0

Für die vorherigen Kommentare: EF erlaubt keine Projektion auf Entitätstyp, daher wird eine Zwischenanonymprojektion zur Umgehung dieser Beschränkung verwendet. –

+0

@ RandolfRincónFadul Können Sie die 'Claim' Klasse zeigen? Ich frage mich, ob Sie alle Felder für diese Klasse auswählen? Und ich denke, die 'ObservationsCount' ist nicht zugeordnete Eigenschaft? –

Antwort

3

Ther Es ist in EF6 nicht möglich, das zu bekommen, was Sie wollen, ohne eine Zwischenprojektion (sei es ein anonymer Typ oder ein konkreter Typ, sobald es kein Entitätstyp ist). Aber wenn Sie alle Objektfelder plus Kindanzahl benötigen, können Sie die Implementierung wie folgt vereinfachen:

var pendingclaims = await (from claim in db.Claims.AsNoTracking() 
          where claim.OfficeCode == _officeCode 
          where claim.ClaimStatusCode == status 
          orderby claim.OpenDate 
          select new 
          { 
           claim, 
           ObservationsCount = claim.Observations.Count 
          }).Take(take).Skip(skip).ToListAsync();      

return pendingclaims.Select(item => 
{ 
    item.claim.ObservationsCount = item.ObservationsCount; 
    return item.claim; 
}).ToList(); 
+0

Abfrage Teil hat funktioniert. Aber für den zweiten Teil stimmt die Projektion nicht mit der Methodensignatur überein. So endete die Erstellung der Liste. +1 und danke, dass du dich an das wichtige AsNoTracking() 'erinnerst. –

+0

Gern geschehen :) Und Entschuldigung für den dummen Fehler, behoben. –

Verwandte Themen