Id のコレクションに基づいてクエリ可能なオブジェクト (IQueryable) をフィルター処理する拡張メソッドがあります。
IQueryable は、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;
}
Idが配列またはリストから作成され、クエリ可能なリストとして渡された場合、機能しません
例えば...
GetNewsItemSummary().WithID(ids.AsQueryable<Guid>())
Idsが LinqToSql リクエストから構成されている場合、機能します!!
これは既知の問題です: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=355026
私の Ids コレクションは LinqToSql リクエストから取得できません...
IQueryableではなくIListを消費するように関数を変更すると、注意してください....
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.
だから...私がしたいのは、ガイドのリストまたは配列に基づいてニュースのコレクションをフィルタリングすることだけです....アイデア???