vb.net - 在 VB.NET 中通过 LINQ 对通用列表进行分组

标签 vb.net linq

我需要获取一个集合并通过 Linq 对其进行分组,但我见过的所有示例都以某种方式或其他方式失败,存在一些我无法理解的语法差异。

我的收藏:

Dim a As New List(Of ProcessAlert)
  a.Add(New ProcessAlert("0000112367", "5551110000@txt.att.net", "Alert", 2))
  a.Add(New ProcessAlert("0000112367", "5551110000@txt.att.net", "Document", 2))
  a.Add(New ProcessAlert("0000112367", "5551110000@txt.att.net", "Note", 2))
  a.Add(New ProcessAlert("0000112367", "jdoe@home.com", "Alert", 1))
  a.Add(New ProcessAlert("0000112367", "jdoe@home.com", "Document", 1))
  a.Add(New ProcessAlert("0000112367", "jdoe@home.com", "Note", 1))
Return a

我需要将这个集合变成一个简单的方法来给出这个最终结果:

"5551110000@txt.att.net", "Alert, Document, Note"
"jdoe@home.com", "Alert, Document, Note"

这是 ProcessAlert 类的定义:

Public Class ProcessAlert
  Public LoanNumber As String
  Public EmailAddress As String
  Public AlertType As String
  Public AlertMethodID As Byte
End Class

提前致谢

光盘

我已经成功转换为 VB:

    Dim res = Alerts.GroupBy(Function(i) i.EmailAddress).Select(Function(g) New KeyValuePair(Of String, String)(g.Key, String.Join(",", g.Select(Function(x) x.AlertType).ToArray())))

现在我如何添加到按 LoanNumber 和电子邮件地址分组,以便我的结果是: "0000112367","jdoe@home.com", "警报、文档、注释"

最佳答案

这是我要编写的 linq 代码(在 C# 中 - 抱歉我无法在 VB 中完成)

var res = a.GroupBy(i=>i.EmailAddress )
    .Select(g=> new KeyValuePair<string, string>(
                    g.Key, 
                    string.Join(",", g.Select(x=> x.AlertType ).ToArray()) 
            ));

这将在 KeyValuePair 集合中为您提供所需的输出

为了按 LoadNumber 和 EmailAddress 对它们进行分组,这将是 C# 代码:

var res = alerts
    .GroupBy(a => new { L = a.LoanNumber, E = a.EmailAddress })
    .Select(a => new
        {
            LoadNumber = a.Key.L,
            EmailAddress = a.Key.E,
            Types = string.Join(", ", a.Select(x => x.AlertType).ToArray())
        }).ToList();

其中结果是复杂类型的列表 {LoadNumber, EmailAddress, Types}

关于vb.net - 在 VB.NET 中通过 LINQ 对通用列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6487472/

相关文章:

c# - 基于表单的身份验证

c# - 将 SQL 语句转换为具有 2 列的 Linq-to-SQL,其中 count(*) 不起作用

c# - 创建通用 LINQ 函数以返回传入的类型

vb.net - 为什么 Chr(3) 是常量表达式而不是 Chr(172)?

arrays - 如何将字符串添加到数组 VB.NET?

c# - 结合两个不同类型的序列

c# - C#中如何向字典中添加数据

c# - 如何获取具有 : in its name? 的元素

c# - 如何从另一个项目添加对共享代码项目 (.shproj) 的引用

vb.net - ClickOnce 应用程序不接受命令行参数