Преобразование вложенного цикла foreach в lambda или linq

#sql #linq #foreach #lambda #nested-loops

#sql #linq #foreach #лямбда #вложенные циклы

Вопрос:

Я изо всех сил пытаюсь преобразовать его в lambda, но не смог добиться успеха. Есть ли какой-либо способ преобразования в linq или lambda?

 foreach (var tempitem in mbsRateTempList)
{
    foreach (var Saveditem in mbsSavedRecordList)
    {
        if (tempitem.MbsSecurityId == Saveditem.MbsSecurityId amp;amp; tempitem.CouponRate == Saveditem.CouponRate
               amp;amp; tempitem.SettlementMonth.Month == Saveditem.SettlementMonth.Month amp;amp; tempitem.Price == Saveditem.Price)
        {
            TobeDeletedIds.Add(Saveditem.Id);
            MatchedIdsInTempList.Add(tempitem.TempId);
            //mbsSavedRecordList[0].ObjectState=Repository.Pattern.Base.Infrastructure.ObjectState.
        }
        //else
        //{

        //}
    }
}
  

Комментарии:

1. Добро пожаловать в Stack Overflow. Пожалуйста, приведите примеры используемых вами данных, имеющихся у вас объектов кода и полученной ошибки. Редактировать ваш вопрос можно.

Ответ №1:

Вы можете Join использовать анонимные типы, содержащие все соответствующие свойства:

 var objectsToAdd = from tempitem in mbsRateTempList
                   join saveditem mbsSavedRecordList
                   on new { tempitem.MbsSecurityId,  tempitem.CouponRate, tempitem.SettlementMonth.Month, tempitem.Price } 
                   equals new { saveditem.MbsSecurityId,  saveditem.CouponRate, saveditem.SettlementMonth.Month, saveditem.Price } 
                   select new { tempitem, saveditem };

foreach(var x in objectsToAdd)
{
    TobeDeletedIds.Add(x.saveditem.Id);
    MatchedIdsInTempList.Add(x.tempitem.TempId);
}