[英]Linq query returns no result
我试图按条件(两个可观察的集合)从列表中获得一个子列表。 尽管这可以按预期工作-选择一些结果:
ObservableCollection<TestCase> affectedTestCases =
new ObservableCollection<TestCase>();
foreach (var testCase in TestCaseList.ListOfTestCases)
{
if (testCase.TestHash == CurrentFile.Hash)
{
affectedTestCases.Add(testCase);
}
}
哈希(和TestHash)是一个简单的字符串。 这个没有显示结果,我想知道为什么:
var affectedTestCases = from testCase in TestCaseList.ListOfTestCases
where testCase.TestHash==CurrentFile.Hash
select testCase;
然后我想通过以下方式使用结果:
foreach (var affectedTestCase in affectedTestCases)
但是它没有显示任何LINQ变体。 我也尝试过将AffectedTestCases强制转换为列表。 我还尝试使用String.Equals()进行比较。 有什么想法我做错了吗?
尝试这个:
var affectedTestCases = TestCaseList.ListOfTestCases.Where(_ => _.TestHash.Equals(CurrentFile.Hash));
ObservableCollection如果不起作用,则实现Collection Strange,使用Any()稍作修改,请尝试此操作
var affectedTestCases = from testCase in TestCaseList.ListOfTestCases
where TestCaseList.ListOfTestCases.Any(o=> o.TestHash.Contains(CurrentFile.Hash))
select testCase ;
要么
affectedTestCases = new ObservableCollection<TestCase>(TestCaseList.Where(o => o.TestHash.Any(m => m.Equals(CurrentFile.TestHash))).Select(o => o));
我想我想通了,我尝试使用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;
}
谢谢您的帮助。 否则我不会弄清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.