Обновить список объектов на основе других LINQ / LAMBDA - PullRequest
1 голос
/ 23 декабря 2010

Вот мои два объекта

    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>();

Я хочу обновить ohBuffer.ReconTarget с помощью ohAttribute.AttributeValue где ohBuffer.DataObjectId == ohAttribute.DataObjectId

Что такое Линк или Лямбда этого?

Ответы [ 3 ]

4 голосов
/ 23 декабря 2010

Вам нужно перебрать каждый элемент в ohBuffer и найти значение в ohAttribute.

Если для каждого буфера есть только один Атрибут, это будет работать.

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

Если поиск возвращает ноль, вы можете объединиться с новым объектом и принять значение по умолчанию

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;
    });
1 голос
/ 23 декабря 2010

Если ваше отношение 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;
        }
}
1 голос
/ 23 декабря 2010

Они так и сделали:

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