请为以下查询建议所需的linq

时间:2014-04-03 11:50:53

标签: c# linq

我的输出为list对象lstResourceList

  HID   NAME   DID  APID  PID   
    3   Aban    1   1   1
    4   Abbas   2   8   5
    4   Abbas   2   5   5
    5   SAAD    4   1   1
    6   GAURAV  4   5   5
    8   Radhesh 2   -1  -1
    1   Abaan   1   8   -1

从这些记录我想首先选择那些HID计数>的记录。 1。 说我得到了

HID  NAME DID APID  PID   
 4  Abbas   2   8   5
 4  Abbas   2   5   5

现在从记录中我想要APID不等于8的选择记录。 那是=>

 HID NAME  DID  APID   PID   
  4 Abbas   2   5      5

现在我想从输出列表中删除此记录。这是最终输出应该是

 HID   NAME    DID  APID PID   
    3   Aban    1   1   1
    4   Abbas   2   8   5
    5   SAAD    4   1   1
    6   GAURAV  4   5   5
    8   Radhesh 2   -1  -1
    1   Abaan   1   8   -1

对linq操作的任何建议???

2 个答案:

答案 0 :(得分:3)

首先,在HID上对您的项目进行分组,以找到共享HID的元素。过滤后,您可以在APID上自行过滤每个组。之后,展平结果以将要删除的项目放在一个列表中。

应该是这样的:

var toRemove = lstResourceList.GroupBy(x => x.HID)
                              .Where(grp => grp.Count() > 1)
                              .SelectMany(grp => grp.Where(x => x.APID != 8))
                              .ToList();

foreach(var item in toRemove)
    lstResourceList.Remove(item);

答案 1 :(得分:0)

这应该这样做:

lstResourceList = lstResourceList.Where(x => x.HID>1 && x.APID != 8).ToList();

编辑:我的回答是错误的。我误解了这个问题。请参阅以下评论