c# - LINQ Distinct(),但以编程方式选择获胜者

标签 c# linq

我找到了 this posting ,关于根据特定属性选择不同的项目。

下面会在我的“结果”列表中查找,按 ID 分组,并选择第一个作为获胜者。

results.GroupBy(r => r.ID).Select(g => g.First()).ToList();

但是,我怎样才能有条件地选择获胜者呢?

例如,每个结果都包含一个名为Language.Name 的属性。

选择不同的结果时,我想选择一个 result.language.name.tolower()== regionasionalisocode 作为获胜者(如果存在)。

如果不存在,则应选择 result.Language.Name.ToLower() == "en" 作为获胜者。

最佳答案

你只需要改变Select():

results
    .GroupBy(r => r.ID)
    .Select(g => g.FirstOrDefault(r => r.Language.Name.ToLower() == regionalISOCode) ??
                 g.First(r => r.Language.Name.ToLower() == "en"))
    .ToList();

关于c# - LINQ Distinct(),但以编程方式选择获胜者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42934971/

相关文章:

c# - Web Application,走哪条路?

c# - DDD 中的创建日期和创建者放在哪里?

c# - 从 C# 中的 asp.net MVC Controller 将 JSON 数据发送到 highcharts pie

c# - 为什么结构实例不存在于堆或堆栈中

linq - 平面列表到层次结构

C# - WPF - 添加图标后的项目大小(从资源加载图标或从项目 EXE 中提取)

c# - 使用 Dynamic Linq 和 EPPlus 导出到 Excel?

c# - 使用 linq 表达式的协变/逆变

linq - 保存 LINQ 查询以供以后使用的最简单方法是什么?

c# - Hashset 与 IQueryable