我有一个值列表,如下所示,左侧的数字表示要删除/插入的对象,其中“插入/删除”是采取的操作
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吗?
答案 0 :(得分:0)
假设您的课程Operation
包含2个属性ID
和CRUD
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();
编辑:
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; }
}
答案 1 :(得分:-1)
不确定是否理解这个问题但yoiu可以检查最高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
}