如果有任何重复,则选择具有特定属性的第一个元素,否则选择第一个元素

彼得·P

例如,我有一个具有这些属性的对象列表

{ ID: "1", STATUS: "INA" }
{ ID: "1", STATUS: "ACT" } 
{ ID: "2", STATUS: "INA" } 
{ ID: "2", STATUS: "BLO" }

现在我想按 ID 将它们分组,以减少重复项,但是当发现重复项时,我想检查是否有任何状态是 ACT,如果是 ACT,我想选择此记录,但如果没有 ACT 状态,我想要选择第一次出现的重复项。

在上面的例子中,我想选择

{ ID: "1", STATUS: "ACT" } //since it has ACT
{ ID: "2", STATUS: "INA" } //since it is first duplicate found

我知道第一步是

var NoDup = from l in list.AsEnumerable()
                  group l by l.ID into c

但我不知道接下来要做什么

蒂姆·施梅尔特
var q = list.GroupBy(x => x.ID)
            .Select(g => g.OrderByDescending(x => x.STATUS == "ACT").First());

因此,首先按 ID 分组,然后按bool从比较返回的对组进行排序x.STATUS == "ACT"真比假“更高”,这就是为什么我使用OrderByDescending. First确保我只得到每个重复组的第一条记录。由于OrderBy...具有稳定的排序,即使没有 ACT 状态,原始顺序也会保持不变。


另一种可能更有效的类似方法是:

var q = list.GroupBy(x => x.ID)
    .Select(g => g.Where(x => x.STATUS == "ACT").DefaultIfEmpty(g.First()).First());

如果重复组非常大,这可能会更有效,因为bool如果第一个已经是 ,不需要按整个组进行排序STATUS == "ACT"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果没有将来的记录,请选择过去的记录,否则请选择第一个将来的记录

选择除第一个元素外的所有子元素

选择嵌套列表的第一个元素

如何使用XPath选择具有特定属性的第一个元素

如果有多个单词,则提取逗号后字符串中的最后一个单词,否则第一个单词

第一个元素的CSS选择器

选择几组中的第一个元素

使用CSS3选择除第一个元素外的所有元素

仅当具有两个类并且共享相同的第一个类时才选择元素

在具有最小索引的数组中找到第一个重复元素

选择第一个孩子的元素

PowerShell-如果有特定字符,则删除第一个字符

CSS选择器-同一组中具有Class的第一个元素

选择元素后具有特定类别的第一个兄弟姐妹

从所有元素和嵌套元素中选择第一个孩子

如何选择具有JavaScript或CSS内容的第一个元素

如果有标签,请仅选择第二个在前标签,或者仅选择第一个

当一个元素没有通过CSS的类时,如何从选择中选择第一个元素?

选择第一个在前的LI元素

将指针传递到向量的第一个元素(如果有)

如果有匹配项,则获取第一个值

如果选择第一个元素,则选择其他元素 jquery

在 CSS 中选择具有特定类的序列的第一个和最后一个元素

如何使用 CSS 仅选择具有 7 个外部元素的第一个元素

在 XSLT 中选择第一个第一个子元素

选择第一个重复的元素

查找具有特定一级后代的第一个父元素

选择div中的第一个元素

获取 jQuery 对象中具有属性的第一个元素,如果没有属性,则首先获取