我对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/

10-12 12:43