【问题标题】:LINQ Update or Insert objects into ListLINQ 更新或将对象插入列表
【发布时间】:2013-11-15 18:49:41
【问题描述】:

好的,所以我有一个包含消息对象集合的列表。每 60 秒更新一次消息对象列表。第一个集合中的一些对象将根据每个对象内部的 ID 属性更新数据。

public class Message
{
    public Int64 Id { get; set; }
    public string Property1 { get; set; }
    public DateTime MessageDate { get; set; }
}

如何在 LINQ 中根据 Id 插入更新的对象?

【问题讨论】:

  • 这是 Linq To Sql 吗? Linq 到实体?也不清楚你在问什么。 “插入”和“更新”对象是两种不同的操作。 “插入”通常表示“创建一个新实例”,“更新”表示“更新现有实例”。
  • 不... LINQ to objects。那么在这种情况下,它会更新。
  • LINQ 无法插入或更新对象。它只能查询对象。
  • @JohnH 可以查询需要更新的项目。
  • @Servy 是的,但这不是被问到的。

标签: c# linq linq-to-objects


【解决方案1】:

您需要获取对 Message 对象的引用。

类似这样的:

this.Messages.ForEach(mess => {

  if(mess.Id == someValue){
      // do something here
  }

})

【讨论】:

    【解决方案2】:
    List<Message> LocalList;
    List<Message> ArrivingList;
    var mergedItems = LocalList.Contcat(ArrivingList);
    mergedItems = (from msg in mergedItems
                   group msg by msg.Id into grp
                   let sameKey = mergedItems.Where(obj => obj.Id == grp.Id)
                   select sameKey.Where(obj => obj.MessageDate == grp.Max(obj2 => obj2.MessageDate)).Single()).ToList();
    LocalList = (List<Message>)mergedItems;
    

    我认为与上述类似的东西可能会“工作”,但我只会使用标准 Dictionary /List 并编写一个小的更新例程。仅仅因为您可以使用特定工具做某事并不意味着您应该这样做。

    对我来说,基于 LINQ 的东西可能更难以排除故障、理解、调试、跟踪、评估等。 (将上面示例中的 LocalList 和 ArrivingList 替换为您的实际变量)

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多