OK LINQを取得するには、汎用からキャストすることはできませんので、私は次の関数書いている:句
private IQueryable<LogEntry> SelectAll<T>(IEnumerable<LogEntry> logEntries, List<Expression<Func<LogEntry, bool>>> whereClause)
{
var selectAllQuery = from l in logEntries select l;
if (whereClause != null)
{
foreach (Expression<Func<LogEntry, bool>> whereStatement in whereClause)
{
selectAllQuery = selectAllQuery.Where(whereClause);
}
}
}
をしかし、それはコンパイルされません。以下のように、それは「selectAllQuery」で何かを返そうとする場合には、エラーがスローされます。
System.Collections.Generic.IEnumerableは 『と最高の拡張メソッドのオーバーロード System.Linqの」の定義が含まれていません』 .Enumerable.Where(System.Collections.Generic.IEnumerable、System.Func)は、」私はこれを鋳造し、私は無駄に考えることができるすべてのどの方法を試してみたいくつかの無効な引数
を持っています。上記のコードでは、最初のselectステートメントを実行するとSystem.Linq.Enumerable.WhereSelectEnumerableIterator<LogEntry,LogEntry>
のタイプの返す明らかに私はLINQについて何か基本的なものを欠いています。しかし何?
乾杯。
ええ、そうです。 – jason
どちらもうまくいかないようです。 Intellisenseに従ってwhereClauseで "Compile"メソッドを使用できず、varをAsQueryable()に変更すると、同様のエラーが発生する - エラー 'System.Linq.IQueryable'に 'Where'の定義が含まれていないベストエクステンションメソッドのオーバーロード 'System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable 、System.Func )'に無効な引数がいくつかあります。私は実際にそれが明白な解決策に見えるように投稿する前にAsQueryableを試しました。 –
@Matt:申し訳ありませんが、それは 'whereStatement。コンパイル ' - そして元のコードでループの本体で' whereStatement'を使用したが、AsQueryableを使用した場合、それはうまくいったでしょう。提案された名前の変更で編集します... –