Невозможно создать постоянное значение типа «x». В этом контексте поддерживаются только примитивные типы или типы перечисления. - PullRequest
2 голосов
/ 18 июня 2020

Я хочу получить список 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;
    }
}

Ответы [ 2 ]

0 голосов
/ 19 июня 2020
        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

0 голосов
/ 18 июня 2020
public List<VisaCodesNamesDto> GetVisaCodesNames(List<VisaCodesNamesInputDto> input) {
    var ids = input.Select(i => i.VisaId).ToList();
    // filter by a single variable...
    var result = Context.VisaConfigurationDocuments
        .Where(vcd => ids.Contains(vcd.VisaId))
        .Select(vcd => new {
            VisaCodeName = visaCodes.NameAr,
            VisaId = visaConfigurationDocuments.VisaId,
            VersionNo = visaConfigurationDocuments.VersionNo
        })
        .ToList();

    // now filter by the second variable...
    result = result
        .Where(dto => input.Any(i => i.VisaId == dto.VisaId && i.VersionNo == dto.VersionNo)
        .ToList();

    return result;
}
...