2016-06-01 16 views
0

私はリストから条件(Observableコレクション)でサブリストを取得しようとしています。これは期待どおりに動作しますが、結果はほんのわずかです:Linqクエリは結果を返しません。

ObservableCollection<TestCase> affectedTestCases = 
    new ObservableCollection<TestCase>(); 
foreach (var testCase in TestCaseList.ListOfTestCases) 
{ 
    if (testCase.TestHash == CurrentFile.Hash) 
    { 
     affectedTestCases.Add(testCase); 
    } 
} 

ここで、Hash(およびTestHash)は単純な文字列です。この1はその結果を示していないと、なぜ私が疑問に思う:

var affectedTestCases = from testCase in TestCaseList.ListOfTestCases 
where testCase.TestHash==CurrentFile.Hash 
select testCase; 

は、その後、私は、結果を使用していた:

foreach (var affectedTestCase in affectedTestCases) 

しかし、それはLINQのバリアントのいずれかを示していません。また、AffectedTestCasesをキャストしてリスト表示しようとしました。私はまた、比較のためにString.Equals()を使ってみました。私が間違っていることは何ですか?

+1

LINQコードはOKです(ただし、 'foreach'と同じではありません)。クエリ結果が使用されているコードをさらに表示してください。 – Dennis

+0

デバッガのコードを歩いたことがありますか? 2番目のケースで 'TestCaseList.ListOfTestCases'に実際に何かがあることは確かですか?コレクションに 'CurrentFile.Hash'と等しい 'TestHash'の値が含まれていると確信していますか?あなたのLINQクエリはそのままで動作するはずです(ToListを追加する必要はありません)ので、何かデータセットに間違っていなければなりません。 –

+0

TestCaseList.ListOfTestCasesには4つの項目があり、そのうち3つはCurrentFile.Hashと同じTestHashを持ちます。データセットを変更せずに、これらの2つのコードを1つの関数で実行しようとします。 – Jammore

答えて

0

これを試してみてください:そのが動作しない場合には、コレクションストレンジを実装

var affectedTestCases = TestCaseList.ListOfTestCases.Where(_ => _.TestHash.Equals(CurrentFile.Hash)); 
+4

何を変更しましたか?コードダンプだけが本当に便利ではありません。 –

0

のObservableCollectionは、わずか(どれを使用して変更)私が思うに、この

var affectedTestCases = from testCase in TestCaseList.ListOfTestCases 
           where TestCaseList.ListOfTestCases.Any(o=> o.TestHash.Contains(CurrentFile.Hash)) 
           select testCase ; 

OR

affectedTestCases = new ObservableCollection<TestCase>(TestCaseList.Where(o => o.TestHash.Any(m => m.Equals(CurrentFile.TestHash))).Select(o => o)); 
+0

2番目のバージョンが機能しません:CS1061: 'bool'に 'Select'の定義が含まれておらず、拡張メソッド 'Select'がありません。 'bool'タイプの最初の引数を受け入れることができました(usingディレクティブまたはアセンブリ参照?) – Jammore

0

を試してみてください私はそれを理解し、LINQを使用しようとした後、CurrentFile.Hash(LINQ条件の一部)を変更しました。その後、affectedTestCasesのforeachは結果を表示しません。だから私は条件を変更したので、LINQを間違って使用しました。私は結果を覚えていると思った。ソリューションは簡単ですが、私はLINQの結果にToList()を使用して、これらの結果を使用することができます。このようなもの:

var affectedTestCases = (from testCase in TestCaseList.ListOfTestCases 
    where testCase.TestHash==CurrentFile.Hash 
    select testCase).ToList(); 

ScriptEditor.Save(filePath);// this changes CurrentFile.Hash 

foreach (var affectedTestCase in affectedTestCases2) 
{ 
    int index = TestCaseList.ListOfTestCases.IndexOf(affectedTestCase); 
    TestCaseList.ListOfTestCases[index].TestHash = CurrentFile.Hash; 
} 

ありがとうございました。私はそうでないとわかっていないでしょう。

関連する問題