2016-06-01 279 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)是一個簡單的字符串。這一個不顯示的結果,我不知道爲什麼:

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代碼是可以的(但它不等同於'foreach')。請顯示更多代碼,查詢結果正在被使用。 – Dennis

+0

你有沒有在調試器中通過代碼?你確定在第二種情況下'TestCaseList.ListOfTestCases'實際上有什麼嗎?你確定集合包含'TestHash'的值等於'CurrentFile.Hash'嗎?您的LINQ查詢應該按原樣工作(您*不需要添加「ToList」),因此您的數據集必須有錯誤。 –

+0

TestCaseList.ListOfTestCases包含4個項目,其中3個與CurrentFile.Hash具有相同的TestHash。我嘗試在一個函數中運行這兩段代碼而不更改數據集。 – 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

第二個版本不起作用:CS1061:'bool'沒有包含'Select'的定義,並且沒有找到接受類型'bool'的第一個參數的擴展方法'Select'可以被找到(你是否缺少using指令或者程序集參考?) – Jammore

0

我想我想通了,我試圖使用LINQ,然後我修改CurrentFile.Hash(LINQ條件的一部分)。之後,在受影響的測試案例上的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; 
} 

感謝您的幫助。否則我不會理解它。