2017-06-12 2 views
0

Ich habe folgende 2 Klassen. Ich verwende den EF-Code zuerst mit der vorhandenen Datenbank.C# - Holen Sie sich Daten mit EF-Code zuerst - DbContext

public class Asset 
 
    {  
 
     [Key]   
 
     public decimal AssetId { get; set; } 
 
     
 
     [StringLength(20)] 
 
     public string AssetNumber { get; set; } 
 
     
 
     public decimal? DistrictId { get; set; } 
 
     
 
     public virtual District District { get; set; }  
 

 
    }

public class District 
 
    {   
 
     [Key] 
 
     public decimal? DistrictId { get; set; } 
 

 
     [StringLength(20)] 
 
     public string DistrictCode { get; set; } 
 

 
     [StringLength(255)] 
 
     public string Description { get; set; } 
 
     
 
     public virtual ICollection<Asset> Assets { get; set; }  
 
    }

Ich brauche die Liste der Vermögenswerte zu erhalten, wo DistrictId nicht null ist.

Ich verwende folgende C# -Code:

IQueryable<CustomClass> assets = dbContext.Assets 
 
      .Where(a => a.DistrictId != null) 
 
      .Select(a => new CustomClass 
 
      { 
 
      });

ich mit Navigationseigenschaften glauben, Sie müssen nicht explizit Say-Wo (a => a.DistrictId = null). Ich bin mir nicht sicher. Also können Sie vorschlagen, was der bessere Weg ist, eine Liste von Assets zu erhalten, bei denen DIstrictId nicht null ist.

Danke,

+0

Haben Sie versucht: (! A => a.District = null) IQueryable Vermögen = dbContext.Assets .Where .Select (a => new Custom { }); oder auch nur: IQueryable Vermögen = dbContext.Assets .Where (a => a.DistrictId.HasValue) .Select (a => new Custom { }); ? – HaukurHaf

+0

Ich habe versucht IQueryable assets = dbContext.Assets. Wo (a => a.District! = Null). Wählen Sie (a => neue CustomClass {}); - Es funktioniert. Aber nicht sicher, es ist der beste Weg, um das Ergebnis zu erreichen. – user659469

+1

Ich glaube nicht, dass es einen besseren Weg gibt. Es ist richtig auf den Punkt. Wie könnte es einfacher sein? Ich glaube nicht. – HaukurHaf

Antwort

0

Da Sie direkt gegen Assets abfragt, sind Sie nicht wirklich die < Asset-Verwendung -> Bezirk Beziehung.

Wenn Sie versuchen, eine Liste der Assets mit Distrikten anzuzeigen oder eine Liste der Districts und ihrer Assets, würden Sie die Navigationseigenschaften verwenden.

Für das Ergebnis, das Sie versuchen zu bekommen, wie HaukurHaf in seinem Kommentar sagte, was Sie tun, ist die einfachste Methode.

0

Das ist so einfach wie möglich, beachten Sie, dass die DistrictID nur die Beziehung definiert, es ist nicht die Navigationseigenschaft, District ist.

Um zu überprüfen Sie

// Eager loading all District properties and then filtering 
List<CustomClass> assets = dbContext.Assets 
    .Include(a => a.District) 
    .ToList() 
    .Where(a => a.District != null) 
    .Select(a => new CustomClass {}) 
    .ToList(); 

// Your initial query. 
List<CustomClass> assets2 = dbContext.Assets 
    .Where(a => a.DistrictID != null) 
    .Select(a => new CustomClass {}) 
    .ToList(); 

Sie sie beide schließlich die gleiche Liste haben werden sehen, tun könnte.

Verwandte Themen