首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ DataTables

LINQ DataTables
EN

Stack Overflow用户
提问于 2017-09-06 11:46:55
回答 1查看 224关注 0票数 0

我有一个包含100多个列和280多行的DataTable,需要根据不同的UserID对它们进行分组,然后单独处理每一行。用户it是唯一的,但是,每个UserID可以有多个行(每个UserID可以有1到20行与它相关联)。所有列,包括UserID,都是字符串值。

我使用过这样的代码:

代码语言:javascript
复制
Dim src = From row In sampleTable.AsEnumerable()

若要返回EnumerableRowCollection(Of DataRow),但当我尝试按DataTable的UserID列分组时,则会得到一个错误。

我需要将DataTable中的行按不明确的UserID分组,并处理每一行。为了完成子处理需求,我还需要跟踪每10个不同的用户in。

我如何根据不同的DataTable对UserID进行分组,并访问具有重复用户I的所有行?

在收到迄今收到的答复后,我尝试了如下:

代码语言:javascript
复制
Dim src = loanTable.AsEnumerable().ToLookup(x >= x.bSSN, x >= x)

并在ToLookup()上得到了一个错误。“重载解析失败,因为不能用这些参数调用可访问的'ToLookup‘(无法推断类型参数'TKey’)。此外,ToLookup(x => x.UserID,x => x)中的'x‘返回'x’未声明的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-06 12:02:41

我不知道你在GroupBy上有什么问题,但这是可行的:

代码语言:javascript
复制
Dim userIdGroups = sampleTable.AsEnumerable().GroupBy(Function(row) row.Field(Of Int32)("UserId"))

现在,每个组都包含带有该UserId的所有行。

另一种选择是使用查找(类似于字典,但您可以访问不可用的键,并得到一个空的行序列返回,而不是异常):

代码语言:javascript
复制
Dim userIdLookup = sampleTable.AsEnumerable().ToLookup(Function(row) row.Field(Of Int32)("UserId"))

Dim userid1Rows As IEnumerable(Of DataRow) = userIdLookup(1)

还可以使用For each枚举GroupByLookup的所有组。

代码语言:javascript
复制
For Each rg In userIdLookup 
    Dim userid = rg.Key
    Dim count = rg.Count()
    ' if you want to enumerate the rows:
    For Each row In rg
        ' process
    Next
Next
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46074397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档