2017-02-13 65 views
1

我正在循環訪問公司列表,並通過使用以下linq查詢來檢索我想要的數據來創建一個匿名對象。LINQ匿名對象選擇屬性如果不爲空

查詢是如下:

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

這個目的是正確地填充作爲一個列表與包含正確的細節一個結果。但有時一個字段包含一個null如何過濾掉那些空值?

我已經嘗試沒有成功如下:

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))); 

我很想得到的對象,而空值,然後在方法中使用它的值。

+0

你爲什麼使用反射?你可以檢查每個屬性在哪裏 –

+0

由於它是一個匿名對象,道具不可用@EhsanSajjad – Baklap4

回答

2

如果你想過濾掉其他屬性設置爲null對象,你可以做這樣的:

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) 
    ); 

這將產生與設置爲非空的所有屬性的匿名對象的列表值。

+0

或者你可以在Select之前手動檢查這些屬性,其中只有4個。 – Evk

+0

@dasblinkenlight你不需要'.AsEnumerable()',**。Select()**已經返回一個 – Innat3

+1

AsEnumerable失蹤了,謝謝!同時我已經修復了它,而不必使用反射。我正在考慮離開哈哈。但很好,它是可行的! – Baklap4

相關問題