首页 > 解决方案 > 无法创建类型为“x”的常量值。此上下文仅支持原始类型或枚举类型

问题描述

我想从 visaConfigurationDocuments 表中获取 VisaCodeIds 列表并加入 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;
    }
}

标签: c#entity-frameworklinqasp.net-web-api

解决方案


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;
}

推荐阅读