【问题标题】:LinQ group and sum two different type of lists and create DictionaryLinQ 对两种不同类型的列表进行分组和求和并创建字典
【发布时间】:2019-12-09 14:08:28
【问题描述】:

) 我有一个关于分组和总结两个不同类型列表的问题。 情况: 我有一个股票(我们称之为 stockA),有一个桶、参考编号、碎片和更多字段...... 在 stockB 中,我们只得到了参考 nr 和 pieces

stockA
------
BucketNo [varchar(7)]
ReferenceNo [varchar(13)]
Productionpieces [int]

stockB
------
ReferenceNo [varchar(13)]
pieces [decimal(18,2)]

数据随 EF 一起提供(效果很好!)

在我的程序中,我想将参考 nr 分组并组合成字典 (?)。 在运行时,我必须经常访问一个密钥。获取碎片并减去一个值。 在我的脑海里有一本字典,在运行时我想访问密钥 dict[x].pieces -= 50;

此语句附带 SQL 的正确数据:

SELECT REPLACE(ReferenceNo,' ','') as ReferenceNo,
    CONVERT(bigint,ISNULL(SUM(Pieces),0) + SNULL(SUM(Productionpieces ),0)) as Productionpieces 
from stockA 
    LEFT JOIN stockB on stockA.ReferenceNo = stockB.ReferenceNo 
where ReferenceNo <> NULL 
GROUP BY ReferenceNo

我尝试了几种方法来获取 KeyValuePair 对象,但在运行时我得到了相同的键异常,我想我没有加入其他数据元组。 在故事的最后,我只想组合两个列表,求和并获取键值对! 也许你有一个很好的例子给我?

【问题讨论】:

  • 不清楚你在问什么。您想按参考编号对所有部分进行分组并对这些部分的值求和吗?你想减去这个值是多少?另外,为什么您在 StockA 和 INT 中以及在 StockB 中的作品是 Decimal?
  • 没错!减去的原因只是产品的可用性(参考编号)。在运行时,我检查每个订单并从分组库存列表中减去所需的部分。它是十进制的,因为产品的自然类型需要十进制单位。
  • 我们需要更多信息 - 显示一些 EF 类和一些您当前用于提取数据的 LINQ。或者您可以使用我的SQL to LINQ Recipe 来转换您的 SQL。

标签: c# list linq dictionary struct


【解决方案1】:

最好的方法是放入数据表,然后在表上使用 linq。请参阅下面的代码:

            SqlConnection conn = new SqlConnection();
            SqlDataAdapter adapter = new SqlDataAdapter("Your SQL Query", conn);

            DataTable dt = new DataTable();
            adapter.Fill(dt);

            Dictionary<string, long> dict = dt.AsEnumerable()
                .GroupBy(x => x.Field<string>("ReferenceNo"), y => y.Field<long>("Productionpieces"))
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());

【讨论】:

  • 但在这种情况下,我不必再次对数据进行分组。无论如何,这两个列表/表没有 groupby 或 groupjoin 吗?
  • 您需要使用 GroupBy 和 ToDictionary。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2014-10-21
  • 2021-08-17
  • 2017-02-20
相关资源
最近更新 更多