abdul subhan mohammed Ответов: 1

Linq запрос для вложенного списка в C#


Привет ребята,

У меня есть список "кандидатов".

в этот список, для каждого кандидата, у меня есть список<candidatecertificates&ГТ;.

У меня есть выпадающий список сертификатов.

I want to compare <candidatecertificate>.ceritifcateID
  with ddlCerifiticate_Selected_value.


I want to fetch all the candidates with particualr certificate ID, only.


Что я уже пробовал:

private List<CandidateInfo> Candidates
{
            get
            {
                var _candidates = CandidateController.Instance.All.FindAll(item => item.Center.ID == ExamSession.Center.ID);
                foreach(var c in _candidates)
                {
                    foreach (var ct in c.CandidateCertificates)
                    {
                        var ct1 = ct.CertificationID == long.Parse(ddlCertificate.SelectedValue);
                        break;
                    }
                    return c;
                }
                return null;
            }
        }


я хотел бы написать запрос LINQ для этого.

может кто-нибудь плз, помогите мне.


Спасибо

F-ES Sitecore

Ваш опубликованный код не имеет логического смысла, поэтому его будет трудно преобразовать в linq. Если ваша логика сейчас не работает, преобразование ее в linq не заставит ее работать по волшебству. Это то, что у вас есть сейчас как LINQ

кандидат ВАР = CandidateController.Инстанции.Все.Метод findAll(товар =&ГТ; пункт.Центр.ИД == ExamSession.Центр.ИД).Метода firstordefault();

abdul subhan mohammed

вот почему мне нужна помощь, чтобы сделать запрос разумным.

johannesnestler

работает ли ваш код сейчас? зачем его менять? - просто не повторяйте повторный анализ выбранного значения все время во время цикла (сделайте это один раз снаружи)

1 Ответов

Рейтинг:
10

Nathan Minier

Просто измените условия, которые вы запрашиваете. Я преобразую ваш FindAll в предложение Where, как я знаю, которое работает для вложенных запросов.

Я также преобразую это в метод, поскольку в качестве свойства существует вероятность того, что ddlCertificate имеет нулевое значение, что вызовет исключение, если свойство будет вызвано преждевременно. Просто вызовите свой синтаксический анализ на selectedValue, прежде чем передавать его методу.

private List<CandidateInfo> Candidates(long selected)
{ 
   return CandidateController.Instance.All
      .Where(item => 
         item.Center.ID == ExamSession.Center.ID &&
         item.CandidateCertificates.Any(cert => cert.CertificationID == selected))
      .ToList();           
}


Ключ здесь заключается в том ,что (предполагая, что вы запускаете разумный ORM) это будет выталкиваться вниз по трубе в виде одного запроса, возвращаемого в виде одного результата, а не зацикливаться приложением, экономя некоторые циклы