【问题标题】:First time using lambda function on c#第一次在 C# 上使用 lambda 函数
【发布时间】:2019-10-29 08:20:57
【问题描述】:

大家好,这是我第一次提出关于堆栈溢出的问题,所以我会尽可能地描述一下。我一直在努力思考 lambda 函数,我认为现在是使用该函数的合适时机。

我有一个 sql 表,其中有一列 machineNo 和另一列名为 count 作为是或否的标志,无论它是否计数。

我的目标是根据 sql 中的 machineNo 列对列进行分组。我已经从 sql 返回列表没有问题。

我有 现货 2 现货 1 现货 1 现货 1 点 1

它应该显示例如

lbl1.Text = 4 lbl2.Text = 1

    public void listlambda()
    {
        con.OpenConnection();
        List<string> mchno = con.LoadList("Select mchNo from tbl_mch_ability where count = 0", "mchNo");

        var num = mchno.GroupBy(n => n == "mchNo");

        lbl1.Text = mchno.GroupBy(m => m == "Spot 1").Count().ToString();
        lbl2.Text = mchno.GroupBy(m => m == "Spot 2").Count().ToString();
    }

我尝试了很多堆栈溢出的例子,但我的标签总是显示两个。

【问题讨论】:

  • 将组更改为var num = mchno.GroupBy(n =&gt; n); 然后更改lbl1.Text = num .Count(m =&gt; m == "Spot 1").ToString();lbl2 相同,因为您的查询只返回一列。
  • 嘿伙计,我得到了这个错误,虽然 operator == 不能应用于 'igrouping' 和 string 类型的操作数
  • 在第一个 GroupBy() 之后(您只需要一个,如上面的注释所示),您可以例如转换为 Dictionary:var dict = num.ToDictionary(g =&gt; g.Key, g =&gt; g.Count());,这样您就可以测试特定的键: if (dict.TryGetValue("Spot 1", out int value)) { lbl1.Text = value.ToString(); }
  • Omg jimi 和 user1672994 非常感谢,我如何喜欢反馈??
  • @JonathanJames 如果您想在评论中亲自/直接与某人联系,只需在姓名前添加一个 @,就像我对您所做的那样。我们不喜欢这里的贡献,我们支持 :) 但尽管如此,您仍然可以支持具有足够声誉的 cmets。我忘了你需要多少。不过我是为你做的

标签: c# sql winforms lambda


【解决方案1】:

您不能在IGrouping 上应用==。您需要将 groupBy 更改为

 var num = mchno.GroupBy(n => n);

后来文本框赋值为

lbl1.Text = num .Count(m => m == "Spot 1").ToString();
lbl2.Text = num .Count(m => m == "Spot 2").ToString();

【讨论】:

  • m 在这里是IGrouping :) 你可以使用类似:num.Single(m =&gt; m.Key == "Spot 1").Count().ToString();(只是一种可能的方式)
  • 也许num.FirstOrDefault(m =&gt; m.Key == "Spot 1")?.Count().ToString(); 更好。
猜你喜欢
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
相关资源
最近更新 更多