gpt4 book ai didi

c# - LINQ让重复数据

转载 作者:行者123 更新时间:2023-12-02 15:04:41 26 4
gpt4 key购买 nike

我对 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 倍。¿你能告诉我为什么吗?以及如何才能收到预期的结果?

感谢您的帮助。

最佳答案

您似乎使用 postres 次数太多,导致结果是预期结果的 5 倍。这可能是由于开头的 from p in postres 未使用,导致其余查询的运行时间比预期多 5 倍(postres 的长度) 。您只需要经过 postres 一次。

我会将您的查询简化为:

IEnumerable<string> mispays = from p in postres
where p.Contains("manzana") && p.Contains("pay")
select p;

Console.WriteLine("{ " + string.Join(", ", mispays) + " }");
// { pay de manzana, pay de manzana y pera }

您还可以尝试其他 LINQ 语法:

var result = postres.Where(s => s.Contains("manzana") && s.Contains("pay"));

Console.WriteLine("{ " + string.Join(", ", result) + " }");
// { pay de manzana, pay de manzana y pera }

说明:

关于c# - LINQ让重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58676237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com