Linq查询返回无结果

时间:2016-06-01 08:52:34

标签: c# .net linq select

我试图通过条件(两个Observable集合)从列表中获取子列表。虽然这可以按预期工作 - 选择一些结果:

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()进行比较。我有什么想法吗?

3 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

ObservableCollection如果它不起作用它会实现Collection Strange,使用Any()稍加修改请试试这个

 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));

答案 2 :(得分: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;
}

感谢您的帮助。否则,我不会想出来的。