2017-02-13 1 views
1

회사 목록을 반복하면서 다음 linq 쿼리를 사용하여 원하는 데이터를 검색하여 익명 개체를 만듭니다.null이 아닌 경우 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))); 

내가 null 값없이 객체를 가져온 다음 방법 내에서 값을 사용 싶네요. 당신이 null로 설정된 모든 속성과 객체를 필터링하려는 경우

+0

왜 리플렉션을 사용하고 있습니까? 당신은 어디에서 각 속성을 확인할 수 있습니다 –

+0

그것은 익명의 개체이기 때문에 소품은 사용할 수 없습니다 @ EhsanSajjad – Baklap4

답변

2

, 당신은 이런 식으로 작업을 수행 할 수 있습니다

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

아니면 그냥 선택하기 전에 수동으로 그 속성을 확인할 수 있습니다, 결국 그들 중 4 명 있습니다. – Evk

+0

@dasblinkenlight'.AsEnumerable()', **. Select() **는 이미 하나를 반환합니다 – Innat3

+1

AsEnumerable이 누락되었습니다! 한편 나는 이미 반사를 사용하지 않고 그것을 고쳤다. 나는 hahah로부터 떨어져서 생각하고 있었다. 그러나 좋은 itable! – Baklap4

관련 문제