开发者

Update list object based on other LINQ / LAMBDA

开发者 https://www.devze.com 2023-02-01 09:23 出处:网络
Here are my two objects public class ObjectHeaderBuffer { public int DataObjectId { get; set; } public string FileName { get; set; }

Here are my two objects

    public class ObjectHeaderBuffer
    {
       public int DataObjectId { get; set; }
       public string FileName { get; set; }
       public int RowCount { get; set; }
       public string Checksum 开发者_C百科{ 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>();

I want to update ohBuffer.ReconTarget with ohAttribute.AttributeValue where ohBuffer.DataObjectId == ohAttribute.DataObjectId

what is linq or lambda of this?


You need to iterate each item in ohBuffer and look up the value in ohAttribute.

Assuming there is only one Attribute for each Buffer, this will work.

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

If the lookup returns null, you can either coalesce to a new object and take the default value

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

or you could just take null

ohBuffer.ForEach(b => b.ReconTarget = 
    {
        var attribute = ohAttribute
            .SingleOrDefault(a => a.DataObjectId == b.DataObjectId);

        if (attribute == null)
            return null;
        return attribute.AttributeValue;
    });


They way i did is:

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


If your relation is 1:1 Then

 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;
    }
  }

Or

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

精彩评论

暂无评论...
验证码 换一张
取 消