我对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);
}
我期望这个结果:
曼萨纳河
支付manzana y pera
但是我收到这个:
曼萨纳河
支付manzana y pera
曼萨纳河
支付manzana y pera
曼萨纳河
支付manzana y pera
曼萨纳河
支付manzana y pera
曼萨纳河
支付manzana y pera
因此代码重复了我预期结果的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 ;)
关于c# - LINQ让重复数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58676237/