2011-01-08 6 views
0
class first 
{ 
    private int? firstID; 
} 

class second 
{ 
    private int secondID; 
    private int secondField; 
} 

public override Expression<Func<first, bool>> FirstFilter() 
{ 
    Contex db = new Contex(); 
    List<second> list = (from p in db.second select p).ToList(); 

    return b => list.Select(p => p.secondID).Contains(b.firstID); 
} 

에 'System.Collections.Generic.IEnumerable '에서 변환 할 수 없습니다 나는 오류가 있습니다 : 나는 여러 가지 방법을 시도 은 'System.Collections.Generic.IEnumerable <int?>'

cannot convert from 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.IEnumerable'

을하지만, 나는 그것을 어떻게 고칠 수 있을지 모른다. firstID이기 때문에 당신은 문제가 점점

list.Select(p => p.secondID).Cast<int?>().Contains(b.firstID); 

, list.Select(p => p.secondID) 때문에 IEnumerable<int? 수 있지만 :

return b => list.Select(p => p.secondID).Contains(b.firstID ?? 0); 

답변

4

사용이 :

+0

완벽한, 덕분에 아주 많이, 내가 문제입니다 알았지 만 – kosnkov

+0

멋진 친구를 캐스팅하는 방법을 알고 din't, 이런 물건은 스택을 꼭대기한다! – MvcCmsJon

0

가 null의 경우 firstID에 대한 디폴트 값을 제공하십시오 int (nullable이 아님), 과부하 해결은 Contains to Contains의 유효한 과부하를 판별 할 수 없습니다. IEnumerable<int?>에서 IEnumerable<int>으로 암시 적으로 변환 할 수 없습니다. Cast 확장 프로그램은 각 요소를 int로 형 변환하여 작동합니다. 이 원하는되지 않을 수 있습니다 알고 있어야 할,

list.Select(p => p.secondID).Contains(b.firstID ?? 0); 

을하지만 :

다른 답변에서 언급 한 바와 같이

, 당신은 또한 단순히 포함에 비 - 널 (NULL)의 INT에 전달할 수 있습니다. 첫 번째 목록은 0를 포함하고 firstID가 null의 경우 firstID가 null의 경우 값이 표현의 null.The 캐스트 버전은 False를 반환 때 0을 전달하기 때문에, 결과는 true가됩니다.