过滤时似乎得到了不同的结果。
我希望这两段代码都能得到相同的结果:
Sitecore.Data.Items.Item firstGuess = Sitecore.Context.Database.GetItem(mediaPath);
var matches = new List<Item>();
//Method A
foreach (var child in firstGuess.Parent.Children.InnerChildren)
{
if (child.DisplayName == firstGuess.DisplayName)
{
matches.Add(child);
}
}
//Matches.count = 2
//Method B
var matches2 = firstGuess.Parent.Children.InnerChildren.Where(i => i.DisplayName == firstGuess.DisplayName);
//matches2.any = false
我正在尝试查找与我的firstGuess
同名的商品。
方法A可以按预期工作,但是方法B似乎给了我一个奇怪的结果,当我期望!matches2.any()
时,false
返回了true
。
经过.Where
和.Select
的测试
为什么这些看似等效的方法为什么给我不同的结果?
答案 0 :(得分:1)
不用多说就很难说,但是您可以尝试一下,即确保您没有在foreach循环中遭受firstGuess突变的困扰。得到两次结果。
var firstGuess = Sitecore.Context.Database.GetItem(mediaPath);
var firstGuess2 = Sitecore.Context.Database.GetItem(mediaPath);
var matches = new List<Item>();
//Method A
foreach (var child in firstGuess.Parent.Children.InnerChildren)
{
if (child.DisplayName == firstGuess.DisplayName)
{
matches.Add(child);
}
} //Matches.count = 2
//Method B
var matches2 = firstGuess2.Parent.Children.InnerChildren.Where(i => i.DisplayName == firstGuess.DisplayName).ToList();
ToList()确保IQueryable <>的执行位置。
通常-如果您在类似这样的代码中发现了一些意外的情况-将var
替换为显式类型-这很可能会使怪异显而易见。