2011-01-08 12 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'

私はさまざまな方法を試してみましたが、私はそれをどのように修正できるのか分かりません。

答えて

4

は、これを使用int(nullを許可しない)、オーバーロード解決では、Contains to callの有効なオーバーロードを判別できません。 IEnumerable<int?>からIEnumerable<int>に暗黙的に変換することはできません。 Cast拡張メソッドは、各要素をintにキャストして動作します。別の答えで述べたように

、あなたはまた、単に含まれにnull非許容のintに渡すことができます。

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

しかし、これは必要されない可能性があることに注意してください。最初のリストに0が含まれ、firstIDがnullの場合、値がnullのときに0を渡すため、結果はtrueになります。firstIDがnullの場合、式のキャストバージョンはfalseを返します。

+0

完璧、ありがとう、私はどこに問題があるのか​​知っていたが、キャストする方法を知っていなかった – kosnkov

+0

すてきな男、これがスタックトップを作る! – MvcCmsJon

0

それがnullの場合firstIDのデフォルト値を提供してみてください。

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

list.Select(p => p.secondID)IEnumerable<int?になりますので、あなたは、問題を取得しているが、firstIDがあるので:

return b => list.Select(p => p.secondID).Contains(b.firstID ?? 0); 
関連する問題