Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LinQ对两种不同类型的列表进行分组和求和,并创建字典_C#_List_Linq_Dictionary_Struct - Fatal编程技术网

C# LinQ对两种不同类型的列表进行分组和求和,并创建字典

C# LinQ对两种不同类型的列表进行分组和求和,并创建字典,c#,list,linq,dictionary,struct,C#,List,Linq,Dictionary,Struct,) 我有一个关于分组和汇总两个不同类型的列表的问题。 情况: 我有一个库存(我们称之为stockA),有一个桶、参考编号、件数和更多字段。。。 在stockB中,我们只得到参考nr和零件 stockA ------ BucketNo [varchar(7)] ReferenceNo [varchar(13)] Productionpieces [int] stockB ------ ReferenceNo [varchar(13)] pieces [decimal(18,2)] 数据来自EF

) 我有一个关于分组和汇总两个不同类型的列表的问题。 情况: 我有一个库存(我们称之为stockA),有一个桶、参考编号、件数和更多字段。。。 在stockB中,我们只得到参考nr和零件

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

stockB
------
ReferenceNo [varchar(13)]
pieces [decimal(18,2)]
数据来自EF(工作正常!)

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

SQL随此语句提供的正确数据:

选择替换(ReferenceNo,,'')作为ReferenceNo,
将(bigint,ISNULL(SUM(Pieces),0)+SNULL(SUM(Productionpieces),0))转换为Productionpieces
来自斯托克
在stockA.ReferenceNo=stockB.ReferenceNo上左连接stockB
其中ReferenceNo NULL
按参照分组
我尝试了几种方法来获取KeyValuePair对象,但在运行时我得到了一个相同的密钥异常,我想我还没有加入另一个数据元组。 在故事的结尾,我只想合并两个列表,求和并获得keyvaluepairs!
也许你们给我举了一个很好的例子?

最好的方法是放入datatable,然后在table上使用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());
SqlConnection conn=newsqlconnection();
SqlDataAdapter=newsqldataadapter(“您的SQL查询”,conn);
DataTable dt=新的DataTable();
适配器填充(dt);
Dictionary dict=dt.AsEnumerable()
.GroupBy(x=>x.Field(“ReferenceNo”),y=>y.Field(“Productionpieces”))
.ToDictionary(x=>x.Key,y=>y.FirstOrDefault());

不清楚你在问什么。是否要按参考编号对所有工件进行分组,并对工件的值求和?你想减去多少?还有,为什么你的作品是斯托克a和INT,斯托克B是十进制的?没错!减法的原因只是产品的可用性(参考号)。在运行时,我检查每个订单,并从分组的库存列表中减去所需的部分。它是十进制的,因为产品的自然类型需要一个十进制单位。我们需要更多信息-显示一些EF类和一些您当前用于提取数据的LINQ。或者您可以使用my转换SQL。但是在这种情况下,我不必再次对数据进行分组。无论如何,这两个列表/表是否没有groupby或groupjoin?您需要将groupby与ToDictionary一起使用。