使用LINQ增加ID

时间:2017-07-11 16:15:26

标签: c# linq asp.net-web-api lambda

每当我从前端添加一个新对象时,id = 0.在WebApi层中,我试图找到对象列表中存在的最大ID,然后将下一个ID分配给新物件。下面的代码不会正确增加ID

List<Event> events = eventVal.Where(e => e != null).ToList();
int eventMaxID = events.Max(e => e.id);

events.Where(e => e.id == 0)
  .Select((e, ixc) => new { id = eventMaxID + 1, Iter = eventMaxID + 1 })
  .ToList();

我不确定如何使用Select方法的第二个参数。

任何帮助将不胜感激!感谢。

1 个答案:

答案 0 :(得分:3)

在您正在使用的第二种选择形式中,ixc是集合中项目的索引。您需要添加该功能以及之前的最大ID。这样你也不必担心分配给Iter(看起来你只是把它当作某种计数器使用)所以我已经删除了它。

var autoIncrementedEvents = events.Where(e => e.id == 0)
  .Select((e, ixc) => 
  {
     e.id = eventMaxId + 1 + ixc;
     return e;
  })
  .ToList();

请注意,编写代码的方式是Linq语句的结果。你想把它分配给我在上面做过的事情。

我不打算将此作为网络设置中的整体方法(竞争条件,重复ID等)的有效性发表评论。理想情况下,您的数据存储区应该分配Id。