2016-06-01 323 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; 
} 

感谢您的帮助。否则我不会理解它。