我试图通过条件(两个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()进行比较。我有什么想法吗?
答案 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;
}
感谢您的帮助。否则,我不会想出来的。