2016-11-29 67 views
-3

我有值列表,如下,在左侧的数字表示插入其中所采取的“插入/删除”是动作要除去的对象/,C#LINQ,需要说明关于逻辑/算法

1 insert 
2 insert 
3 insert 
2 remove 
4 insert 
2 insert 
3 remove 
5 insert 
3 insert 
5 remove 

我想要的最终结果是“5删除”。

因此,如果列表中被移除的对象的位置大于插入的同一对象的位置,那么它将被删除,其他将保持不变(将插入1,2,3,4)。我们可以用LINQ来做到吗?

+4

所以,你要我们实现这个场景对你来说,是不是?对不起,我们不提供代码写入服务 –

+0

不幸的是,我不明白如何最终的结果可能是“5删除”例如“1插入”呢?根据你的描述,它应该保持不变。问题很混乱。而且,它听起来不像LINQ场景。 –

+0

“因此,如果列表中移除的对象的位置大于插入位置,那么它将被移除,其他将保持不变。” - 什么??? – Enigmativity

回答

-1

不是一定要了解这个问题,但yoiu可以检查higgest ID等于“删除”,这样的:

public class MyList 
    { 
     public int Id { get; set; } 
     public string ToDo { get; set; } 
    } 

List<MyList> MyList = new List<MyList>(); 
    if (MyList.OrderBy(c => c.Id).LastOrDefault().ToDo == "remove") 
     { 
      // Code to remove what need to be removed 
     } 
+0

您可以将此应用于OP的数据吗? – Enigmativity

0

比方说,你有Operation类2处房产IDCRUD

public class Operation 
{ 
    public int ID { get; set; } 

    public string CRUD { get; set; } 
} 

var result = list.GroupBy(x => x.ID) 
       .ToDictionary(x => x.Key, x => x.Last().CRUD); 

//if you want to have same List<Operation> 
list = list.GroupBy(x => x.ID) 
      .Select(x=> new Operation { ID = x.Key, CRUD = x.Last().CRUD }).ToList(); 

这里dotNetFiddle

编辑:

public static void Main() 
{ 
    List<Operation> list = new List<Operation>(); 

    Operation o1 = new Operation(); 
    o1.ID = 1; 
    o1.CRUD = "Insert"; 
    list.Add(o1); 

    Operation o2 = new Operation(); 
    o2.ID = 2; 
    o2.CRUD = "Insert"; 
    list.Add(o2); 

    Operation o3 = new Operation(); 
    o3.ID = 3; 
    o3.CRUD = "Insert"; 
    list.Add(o3); 

    Operation o4 = new Operation(); 
    o4.ID = 2; 
    o4.CRUD = "Remove"; 
    list.Add(o4); 

    Operation o5 = new Operation(); 
    o5.ID = 4; 
    o5.CRUD = "Insert"; 
    list.Add(o5); 

    Operation o6 = new Operation(){ID=2, CRUD = "Insert"}; 

    list.Add(o6); 

    Operation o7= new Operation(){ID=3, CRUD = "Remove"}; 

    list.Add(o7); 

    Operation o8= new Operation(){ID=5, CRUD = "Insert"}; 

    list.Add(o8); 

    Operation o9= new Operation(){ID=3, CRUD = "Insert"}; 
    list.Add(o9); 

    Operation o10= new Operation(){ID=5, CRUD = "Remove"}; 
    list.Add(o10); 

    var result = list.GroupBy(x => x.ID).ToDictionary(x => x.Key, x => x.Last().CRUD); 

    foreach(var item in result) 
    { 
     Console.WriteLine(item.Key + ": " + item.Value); 
    } 

    list = list.GroupBy(x => x.ID) 
     .Select(x=> new Operation { ID = x.Key, CRUD = x.Last().CRUD }).ToList(); 

    Console.WriteLine("List values"); 

    foreach(var item in list) 
    { 
     Console.WriteLine(item.ID + ": " + item.CRUD); 
    } 

    //output for 5 is Remove. 

} 

public class Operation 
{ 
    public int ID { get; set; } 

    public string CRUD { get; set; } 
} 
+0

您可以将此应用于OP的数据吗? – Enigmativity

+0

@Enigmativity有dotNetFiddle,你可以检查它... – mybirthname

+0

@Enigmativity是的,你可以应用它。 – mybirthname