我对LINQ简单示例有疑问。我没有收到预期的结果。这是代码:
string[] postres = { "pay de manzana", "pastel de chocolate", "manzana caramelizada", "fresas con crema", "pay de manzana y pera" };
IEnumerable<string> mispays = from p in postres
let manzanitas = (
from p1 in postres
where p1.Contains("manzana")
orderby p1
select p1)
from p2 in manzanitas
where p2.Contains("pay")
select p2;
foreach (string postre in mispays)
{
Console.WriteLine(postre);
}
我期望这个结果:
苹果派苹果梨派
但是我收到这个:
苹果派梨梨派苹果派梨梨派苹果派梨梨派苹果派梨梨派苹果派梨梨派
因此代码重复了我预期结果的5倍。你能告诉我为什么吗?和¿我如何收到预期的结果?
谢谢你的帮助。
这是另一个版本。
string[] postres = { "pay de manzana", "pastel de chocolate", "manzana caramelizada", "fresas con crema", "pay de manzana y pera" };
var keyWords = new string[] {"manzana", "pay"};
var found = postres
.Where( p => keyWords.All( w => p.Contains(w)))
.ToList();
foreach (var o in found) Console.WriteLine(o);
pay de manzana
pay de manzana y pera
更新以下评论。
您知道使用“ let”的任何方式吗?
var found =
from p in postres
let keyWords = new string[] {"manzana", "pay"}
let sentence = p.ToLower()
where keyWords.All( w => sentence.Contains(w.ToLower()))
select p;
// ToLower()s are obviously optional, but it gives you an extra let ;)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句