14

C# の Dynamic linq で「Contains」キーワードを含むクエリを実行しているときに、いくつかの問題に直面しています。以下のエラーが表示されます

タイプ 'Int32' にはプロパティまたはフィールドが存在しません

私のコードは以下の通りです:

データ型文字列フィールドに「Contains」キーワードを使用すると、以下のように正常に動作します

string[] CandidateNamesArray = new string[]{"Ram", "Venkat", "Micheal"}
var dynamicLinqQuery = Candidates.Where("CandidateName.Contains(@0)", CandidateNamesArray );
  • 正常に動作します

しかし、データ型 int フィールドに「Contains」キーワードを使用すると、以下のように例外がスローされます

int[] CandidateIdsArray = new int[]{4, 78, 101}
var dynamicLinqQuery = Candidates.Where("CandidateId.Contains(@0)", CandidateIdsArray);

実行時例外 - 「タイプ 'Int32' に適用可能なメソッド 'Contains' が存在しません」

以下のように別の方法でも試しました

int[] CandidateIdsArray = new int[]{4, 78, 101}
var dynamicLinqQuery = Candidates.Where("@0.Contains(CandidateId)", CandidateIdsArray);

実行時例外 - 「タイプ 'Int32' にプロパティまたはフィールド 'CandidateId' が存在しません」

上記の問題を解決するためにほぼ 2 日を費やしましたが、成功できませんでした。上記の問題を解決するために私を助けてください...前もって感謝します

4

5 に答える 5

9

あなたの投稿から長い時間が経っていることは知っていますが、今日も同じ問題に直面しました。

outerIt内のプロパティの前に使用して解決しましたContains

あなたの例では:

int[] CandidateIdsArray = new int[]{4, 78, 101}
var dynamicLinqQuery = Candidates.Where("@0.Contains(outerIt.CandidateId)", CandidateIdsArray);

DynamicLinq は CandidateId が配列のオブジェクトのプロパティであると考えていたため、うまくいきました。そして、outerIt を使用すると、候補である外側のイテレータを参照していることがわかりました。

于 2016-09-28T18:20:15.823 に答える
1

配列を文字列に変換してから、Contains() を使用して int に戻すことができます。

于 2013-03-26T09:10:16.787 に答える
1

私は Dynamic Linq を知りInt32ませんが、 type に呼び出されたメソッドが含まれていないことは明らかですContainsstring呼び出す前に a に変換するのはどうContainsですか?

var dynamicLinqQuery = Candidates.Where("CandidateId.ToString().Contains(@0)", CandidateIdsArray);
于 2013-03-26T09:15:07.977 に答える
0

間違ったものをチェックしているようです。最初のクエリでは、フィールド「CandidateName」に別の文字列が含まれるたびに実際にチェックし、それが機能します。しかし、2 番目の例では、フィールド「CandidateId」に別の int が含まれているかどうかを確認します。また、int に別の int を含めることはできないため、エラーが発生します。

編集:

3 番目のサンプル コードのように見え、例外が一致しません。"No property or field 'CandidateId' exists in type 'Int32'"コードが次の場合、例外が発生します。

int[] CandidateIdsArray = new int[]{4, 78, 101}
var dynamicLinqQuery = 
      CandidateIdsArray.Where("@0.Contains(CandidateId)", CandidateIdsArray);

しかし、あなたが提供したコードは正しく見え、動作するはずです:

int[] CandidateIdsArray = new int[]{4, 78, 101}
var dynamicLinqQuery = 
      Candidates.Where("@0.Contains(CandidateId)", CandidateIdsArray);
于 2013-03-26T09:12:28.947 に答える
0

次のことを試してください。

var validCandidateIds = new List<int>(){4, 78, 101};
var filteredCandidates = Candidates.Where(
    "@0.Contains(CandidateId)", validCandidateIds);

等しい必要があります (ただし、おそらくそれよりも遅くなります):

var validCandidateIds = new List<int>(){4, 78, 101};
var filteredCandidates = Candidates.Where(
    c => validCandidateIds.Contains(c.CandidateId));
于 2016-09-28T18:44:32.163 に答える