【问题标题】:Update list object based on other LINQ / LAMBDA基于其他 LINQ/LAMBDA 更新列表对象
【发布时间】:2010-12-23 02:25:58
【问题描述】:

这是我的两个对象

    public class ObjectHeaderBuffer
    {
       public int DataObjectId { get; set; }
       public string FileName { get; set; }
       public int RowCount { get; set; }
       public string Checksum { get; set; }
       public int ReconTarget { get; set; }
    } 

    public class ObjectHeaderAttribute
    {
       public int DataObjectId { get; set; }
       public int AttributeType { get; set; }
       public int AttributeValue { get; set; }

    }

        var ohBuffer = new List<ObjectHeaderBuffer>();
        var ohAttribute = new List<ObjectHeaderAttribute>();

我想用 ohAttribute.AttributeValue 更新 ohBuffer.ReconTarget,其中 ohBuffer.DataObjectId == ohAttribute.DataObjectId

什么是 linq 或 lambda?

【问题讨论】:

    标签: c#-3.0 lambda linq-to-objects


    【解决方案1】:

    你需要遍历ohBuffer中的每一项,并在ohAttribute中查找值。

    假设每个 Buffer 只有一个 Attribute,这将起作用。

    ohBuffer.ForEach(b => b.ReconTarget = ohAttribute
        .SingleOrDefault(a => a.DataObjectId == b.DataObjectId).AttributeValue);
    

    如果查找返回 null,您可以合并到一个新对象并采用默认值

    ohBuffer.ForEach(b => b.ReconTarget = 
        (ohAttribute.SingleOrDefault(a => a.DataObjectId == b.DataObjectId) 
             ?? new ObjectHeaderAttribute())
            .AttributeValue);
    

    或者你可以选择null

    ohBuffer.ForEach(b => b.ReconTarget = 
        {
            var attribute = ohAttribute
                .SingleOrDefault(a => a.DataObjectId == b.DataObjectId);
    
            if (attribute == null)
                return null;
            return attribute.AttributeValue;
        });
    

    【讨论】:

    • 如果查找返回 null 怎么办?我得到一个无效的参考。有什么办法吗? Tks
    • 太感谢了!希望我能加倍回答! ;-)
    【解决方案2】:

    他们的做法是:

     foreach (var objectHeaderBuffer in ohBuffer)
            {
                var objectHeaderAttribute = (from c in ohAttribute where c.DataObjectId == objectHeaderBuffer.DataObjectId select c).First();
                objectHeaderBuffer.ReconTarget = objectHeaderAttribute.AttributeValue;
            }
    

    【讨论】:

    • 在你的问题中你说你想用 LINQ 或 lambda 来做这件事。您应该为有帮助的答案投票,而不是简单地发布您自己的答案并接受它。
    【解决方案3】:

    如果你们的关系是 1:1 那么

     foreach (ObjectHeaderBuffer Itemx in ohBuffer)
     {
        ObjectHeaderAttribute Itemy= (from ObjectHeaderAttribute c in ohAttribute where c.DataObjectId == Itemx.DataObjectId select c).FirstOrDefault();
        if(Itemy!=null)
        {
            Itemx .ReconTarget = Itemy.AttributeValue;
        }
      }
    

    或者

    foreach (ObjectHeaderBuffer Itemx in ohBuffer)
    {
            ObjectHeaderAttribute Itemy= ohAttribute.Where(c=>c.DataObjectId == Itemx .DataObjectId).FirstOrDefault();
            if(Itemy!=null)
            {
                Itemx .ReconTarget = Itemy.AttributeValue;
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多