c# - 尝试将 Distinct() 放入相对复杂的 LINQ 查询中

标签 c# linq

到目前为止我有这个查询:

 var msg = ModelState.Values
                   .Where(x => x.Errors.Any())
                   .Select(c => c.Errors.Select(d => d.ErrorMessage).Aggregate((e, f) => (e ?? "") + "<br/>" + f))
                   .Aggregate((x, y) => (x ?? "") + "<br/>" + y);

这工作得很好,但我需要过滤掉重复的错误消息。我尝试将 GroupBy() 和 Distinct() 添加到获取 ErrorMessage 的谓词之前和之后的几个位置。我错过了什么?

如果我按原样运行它,我会收到以下结果:

"Contact Email address invalid<br/>Contact Email address invalid"

此处的每个 ErrorMessage 值都是“联系人电子邮件地址无效”。这些是我想过滤掉的重复项。

最佳答案

我可以推荐一个替代方案吗?

假设您想要不同的消息,由 break 标记分隔:

var items = ModelState.Values
    .SelectMany(c => c.Errors.Select(d => d.ErrorMessage))
    .Distinct()
    .ToArray();

string msg = string.Join("<br/>", items);

关于c# - 尝试将 Distinct() 放入相对复杂的 LINQ 查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085077/

相关文章:

c# - 将 RichTextBox.Text 数据绑定(bind)到字符串

c# - ICollection<T> 使用 LINQ 计算每小时平均值

c# - 展平一个 ObservableCollection

c# - 使用 linq 时摆脱嵌套的 foreach 循环

c# - 更新后的 MS Access 数据库无法正常工作

c# - SQL 异常错误 C# ASP.Net

c# - 用 linq 实现密集排名

c# - 如何在添加新行之前使所有列都允许为空?

c# - 理解图表

c# - 当子进程崩溃时如何禁止显示 Microsoft 错误报告对话框