2017-02-13 2 views
1

Ich bin durch eine Liste von Unternehmen und erstellen Sie ein anonymen Objekt durch Verwendung der folgenden Linq-Abfrage, um die Daten, die ich haben wollen, abrufen.LINQ anonyme Objekt wählen Sie Eigenschaft, wenn nicht Null

Die Abfrage ist wie folgt:

var customMail = this.db.Companies.Where(c => c.Id == company.Id) 
            .Select(x => new { x.FromMail, x.FromName, x.Subject, x.EmailBody }) 

Dieses Objekt korrekt als Liste mit einem Ergebnis gefüllt ist, um die richtigen Daten enthält. Aber manchmal enthält ein Feld eine null Wie würde man diese Nullwerte herausfiltern?

Ich habe versucht, die folgenden ohne Erfolg:

var customMail = this.db.Companies.Where(c => c.Id == company.Id) 
            .Select(x => new { x.FromMail, x.FromName, x.Subject, x.EmailBody }) 
            .Select(a => a.GetType().GetProperties() 
                .Where(pi => pi.GetValue(a) != null) 
                .Select(pi => pi.GetValue(a))); 

Ich würde gerne das Objekt ohne NULL-Werte erhalten und dann ihre Werte innerhalb des Verfahrens verwendet werden.

+0

Warum verwenden Sie Reflexion? Sie können jede Eigenschaft in einem Where überprüfen –

+0

Da es ein anonymer Gegenstand ist, sind die Requisiten nicht verfügbar @EhsanSajjad – Baklap4

Antwort

2

Wenn Sie Objekte herausfiltern möchte mit jeder seiner Eigenschaften auf null, können Sie es wie folgt tun:

var customMail = this.db.Companies.Where(c => c.Id == company.Id) 
    .Select(x => new { x.FromMail, x.FromName, x.Subject, x.EmailBody }) 
    .AsEnumerable() // Now you can use reflection 
    .Where(
     a => a.GetType().GetProperties().All(pi => pi.GetValue(a) != null) 
    ); 

Dies erzeugt eine Liste von anonymen Objekte mit allen Eigenschaften auf nicht-null Werte.

+0

Oder Sie können diese Eigenschaften nur manuell vor Auswahl überprüfen, es gibt nur 4 von ihnen. – Evk

+0

@dasblinkenlight Sie brauchen nicht '.AsEnumerable()', **. Wählen Sie() ** bereits zurück – Innat3

+1

Die AsEnumerable fehlte danke! mittlerweile habe ich es bereits repariert, ohne reflexionen verwenden zu müssen. Ich dachte weit weg hahah. Aber schön, es ist machbar! – Baklap4

Verwandte Themen