3

containsメソッドを使用してDynamicLINQを介してINステートメントを実行しようとしています。次のコードを使用すると、正常に実行されます。

var statuses = new List<string> { "Active" };
result = result.Where("@0.Contains(Status)", statuses.ToArray());

しかし、整数の配列に切り替えると、エラーが発生します。

var years = new List<int> { 2012 };
result = result.Where("@0.Contains(Year)", years.ToArray());

これは、後で使用して受け取るエラーです。

タイプ「Int32」に該当するメソッド「Contains」が存在しません

INステートメントの使用を回避するために複数のORステートメントを使用する必要なしにこれを行う方法はありますか?

これらが検索しているデータベース内のフィールドは、null許容フィールドです。それが問題の原因でしたか?intからintに切り替えましたか?それでも同じエラーが表示されます。助言がありますか?

4

4 に答える 4

2

さて、いくつかの調査の後、Containsは「箱から出して」機能しないようです。最初のクエリが機能すると言ったとき、私は本当に驚いています。試してみたところ、「Int32」と同じエラーが発生しました。

ここで回避策を見つけることができます:

http://blog.walteralmeida.com/2010/05/advanced-linq-dynamic-linq-library-add-support-for-contains-extension-.html

System.Linq.Dynamicライブラリを自分で変更するか、サンプルプロジェクトをここからダウンロードする必要があります: http ://walteralmeida.typepad.com/files/dynamiclinqextension.zip

しかし、この記事は現在古くなっている可能性があります(20109以降のSystem.Linq.Dynamicの進化についてはわかりません。

于 2012-07-02T13:00:13.240 に答える
1

.Containsの使用方法が原因で、コードが失敗しています。代わりにこれを試してください:

var years = new List<int> { 1, 2, 3, 4 };
var result = result.Where(element => years.Contains(element));

認識されなかったことをお詫びします。DynamicLinqで作業する必要があります。私の理解では、ContainsはデフォルトでDynamic Linqでサポートされていませんが、ライブラリを拡張してサポートすることは可能です。ライブラリを拡張する方法を説明しているWalterAlmediaによるこのリンクをご覧ください。DynamicLINQを拡張してContainsをサポートする

于 2012-07-02T12:43:58.540 に答える
0

次のように使用する必要があります、

var resultset = from x in years
                where x == yearTobeSelected
                select x;

IEnumerable.Contains()または、コードにリストを含めることで使用できます。

于 2012-07-02T12:35:43.567 に答える
0
var statuses = new string[] { "Active" };
result = result.Where(r => statuses.Contains(r.Status));
于 2012-07-02T13:03:22.200 に答える