vb.net - 数据表上的 LINQ 对多列求和 vb.net
问题描述
有谁知道是否可以根据另一列的给定标准对数据表或数据网格视图的多个列进行求和?简而言之,我有一个看起来(简单)像这样的表:
Ph Length Start
A 10 1.5
B 14 2
C 9 1.8
A 11 1.4
等等....
我想要做的是了解,是否可以使用 LINQ 基于“Ph”对一个查询中的长度和开始列进行求和?还是我需要为每封信写一个?
本质上,结果需要是 A = 21, 2.9。B = 14, 2. C = 9, 1.8
我被难住了,老实说,我不知道该怎么做。我什至不介意是否有人可以为我指出一个非常好的资源来更好地学习 LINQ。
解决方案
要根据键列值组合 LINQ 中的行,请使用GroupBy
.
一旦有了行组,就可以对感兴趣的列求和。
在 LINQ 查询理解语法中,
Dim sums = From dr In dt.AsEnumerable()
Group dr By Ph = dr.Field(Of String)("Ph") Into drg = Group
Select New With {
.Ph = Ph,
.LengthSum = drg.Sum(Function(dr) dr.Field(Of int)("Length")),
.StartSum = drg.Sum(Function(dr) dr.Field(Of Double)("Start"))
}
如果您更喜欢 lambda 语法,
Dim sums2 = dt.AsEnumerable() _
.GroupBy(Function(dr) dr.Field(Of String)("Ph")) _
.Select(Function(drg) New With {
.Ph = drg.Key,
.LengthSum = drg.Sum(Function(dr) dr.Field(Of Integer)("Length")),
.StartSum = drg.Sum(Function(dr) dr.Field(Of Double)("Start"))
})
在这两种情况下,查询的结果都是IEnumerable
我在select
/中创建的匿名对象Select
。您可以创建一个类,或者通过一些额外的工作,创建一个新DataTable
的来保存答案,或者使用现有DataTable
.
推荐阅读
- css - CSS Border iOS 外观问题的解决方案?
- scrapy - Scrapy response.status not 100% accurate?
- c# - Need I enable ReadyToRun in each of my dll whlie publish the exe file?
- php - Wordpress media library broken after uploading PDF
- react-native - update `headerRight` inside a screen that is hosted by stack navigator
- python - Django: update field of ManyToMany instance when it's set
- r - running multiple regressions at once and getting their coefficients
- docker - docker volume on file system
- php - $_COOKIE replaced plus with space
- salesforce - Update a dropdown value using workflow rules