ani*_*ita 5 c# linq foreach sitecore
过滤时我似乎得到了不同的结果.我希望这两段代码得到相同的结果:
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
Run Code Online (Sandbox Code Playgroud)
我想找到与我同名的物品firstGuess.
方法A按预期工作,而B似乎给我一个奇怪的结果是!matches2.any()返回false,当我希望true.
用.Where和测试.Select
为什么这些看似相同的方法会给我不同的结果?
没有更多信息很难说,但你可以尝试这个,即确保你不会遭受 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();
Run Code Online (Sandbox Code Playgroud)
ToList()也是确保 IQueryable<> 明确执行的地方。
一般来说 - 如果你在这样的代码中发现一些意想不到的东西 - 替换var 为显式类型 - 这很可能会使奇怪的现象变得明显。