Не удалось создать постоянное значение типа «x». В этом контексте поддерживаются только примитивные типы или типы перечисления.

Я хочу получить список VisaCodeIds из таблицы VisaConfigurationDocuments и присоединиться к таблице VisaCodes, чтобы получить VisaCodeName, и я получаю эту ошибку для запроса ниже:

     public List<VisaCodesNamesDto> GetVisaCodesNames(List<VisaCodesNamesInputDto> input)
    {


        var result = (from visaConfigurationDocuments in Context.VisaConfigurationDocuments
                      join visaCodes in Context.VisaCodes
                      on visaConfigurationDocuments.VisaCodeId equals visaCodes.VisaCodeId
                      where (input.Any(x => x.VisaId == visaConfigurationDocuments.VisaId && x.VersionNo == visaConfigurationDocuments.VersionNo))
                      select new VisaCodesNamesDto
                      {
                          VisaCodeName = visaCodes.NameAr,
                          VisaId = visaConfigurationDocuments.VisaId,
                          VersionNo = visaConfigurationDocuments.VersionNo
                      }).ToList();

        return result;
    }
}

person Osama Ahmed    schedule 18.06.2020    source источник
comment
Что ж, подумайте о том, как бы вы перевели этот LINQ в SQL. Какой код SQL будет представлять объект типа List<VisaCodesNamesInputDto>, не относящийся к базе данных? Затем подумайте о тексте сообщения об ошибке. Я уверен, что вы соберете все это вместе.   -  person Sam Axe    schedule 18.06.2020
comment
Я знаю проблему, но как решить ее эффективным способом   -  person Osama Ahmed    schedule 18.06.2020
comment
Вы можете запустить одно предложение переменной where в своем запросе, а затем отфильтровать по второй переменной в памяти после возврата результатов.   -  person Sam Axe    schedule 18.06.2020


Ответы (1)


        public List<VisaCodesNamesDto> GetVisaCodesNames(List<VisaCodesNamesInputDto>input)
    {


        List<string> filterlist = input.Select(x => x.VisaId.ToString() + "-" + x.VersionNo).ToList();


        var result = (from visaConfigurationDocuments in Context.VisaConfigurationDocuments
                      join visaCodes in Context.VisaCodes
                      on visaConfigurationDocuments.VisaCodeId equals visaCodes.VisaCodeId
                      where filterlist.Any(x => x == visaConfigurationDocuments.VisaId.ToString() + "-" + visaConfigurationDocuments.VersionNo)
                      select new VisaCodesNamesDto
                      {
                          VisaCodeNameAr = visaCodes.NameAr,
                          VisaCodeNameEn = visaCodes.NameEn,
                          VisaId = visaConfigurationDocuments.VisaId,
                          VersionNo = visaConfigurationDocuments.VersionNo
                      }).ToList();

        return result;}

я делаю обходное решение, которое решает мою проблему при преобразовании типа сложного объекта в предложении where

person Osama Ahmed    schedule 19.06.2020