2009-06-07 8 views
5

私はIDのコレクションに基づいて照会可能オブジェクト(のIQueryable)をフィルタリングすることになっている拡張メソッドを持って入って....のIQueryableは私から供給されていることをスタックSQLにLINQでのオーバーフローやキーワード

注意LinqToSql要求

public static IQueryable<NewsItemSummary> WithID(this IQueryable<NewsItemSummary> qry, IQueryable<Guid> Ids) 
    { 
     return from newsItemSummary in qry 
       where Ids.Contains(newsItemSummary.ID) 
       select newsItemSummary; 
    } 

のIdsは、配列またはリストから作成され、照会可能なリストとして渡され場合、それは例えば

を仕事doesntのを経由してデータベース...

GetNewsItemSummary().WithID(ids.AsQueryable<Guid>()) 

Idがの場合、LinqToSqlリクエストから構成されています。

この知られている問題:それはかなりのIQueryableよりも消費し、IListのように、私は、機能を変更した場合 http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=355026

私のIdsコレクションは、LinqToSql要求...

ノートから来ることができません。.. ..

public static IQueryable<NewsItemSummary> WithID(this IQueryable<NewsItemSummary> qry, IList<Guid> Ids) 
    { 
     return from newsItemSummary in qry 
       where Ids.Contains(newsItemSummary.ID) 
       select newsItemSummary; 
    } 

私は今、次の例外を取得:

Method 'Boolean Contains(System.Guid)' has no supported translation to SQL. 

だから私がしたいことは、Guidsのリストや配列に基づいてニュースのコレクションをフィルタリングすることです....アイデア???

+0

"stackoverflow"タグは通常、メタ質問の対象ですが、 "stack-overflow"タグは実際のスタックオーバーフローの方が優れています。 – Zifre

答えて

11

これは翻訳されます。そのような - の

public static IQueryable<NewsItemSummary> WithID(
    this IQueryable<NewsItemSummary> qry, 
    List<Guid> Ids 
) 
    { 
     return from newsItemSummary in qry 
       where Ids.Contains(newsItemSummary.ID) 
       select newsItemSummary; 
    } 
) 

翻訳は、ローカルコレクションに対するメソッドは、.NET 3.5のためのLINQ to SQLでの開発に最後に追加機能の一つだったので、そうしない仕事を期待する場合があります含まれていIList<T>の翻訳です。

また、LinqToSqlは膨大な数の項目を含むリストを喜んで翻訳していますが(50,000以上の要素があることがわかりましたが)、SQL Serverは1つのクエリに対して2,100個のパラメータしか受け付けません。

+2

質問と回答の両方が私の問題とまったく同じではありませんでしたが、解決策、つまりIList <>をList <>に変更する手助けをしました。ラメバグ... – craastad

関連する問題