C# LinQ对两种不同类型的列表进行分组和求和,并创建字典
) 我有一个关于分组和汇总两个不同类型的列表的问题。 情况: 我有一个库存(我们称之为stockA),有一个桶、参考编号、件数和更多字段。。。 在stockB中,我们只得到参考nr和零件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
------
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一起使用。