2017-02-13 2 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 }) 

このオブジェクトは正しい詳細を含む1つの結果でリストとして正しく満たされています。しかし時にはフィールドには次のものが含まれています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))); 

私はnull値なしでオブジェクトを取得して、メソッド内でその値を使用してみたいです。

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

これは、非nullに設定されたすべてのプロパティを持つ匿名オブジェクトのリストを作成値。

+0

または選択する前にこれらのプロパティを手動でチェックすることができます。 – Evk

+0

@dasblinkenlight '.AsEnumerable()'、**。Select()**は既に1を返します – Innat3

+1

AsEnumerableがありませんでした!私はすでに反射を使わずにそれを修正しました。私はhahahの方法を考えていた。しかし、それはいいですね! – Baklap4

関連する問題