【问题标题】:C# Entity Framework .Any() Unable to create a constant value of type 'Anonymous type'C# Entity Framework .Any() 无法创建“匿名类型”类型的常量值
【发布时间】:2018-10-02 18:19:22
【问题描述】:

我正在获取我的数据库列表,选择某些内容,然后我想查询另一个数据库,其中原始列表包含此数据库作业参考

 var jobRefs = context.jobs.Where(j => j.LSM_Status == null &&
                                       j.despatched_time == null
                                       )
      .Select(x => new { x.job_ref, x.volumes_env, x.postout_deadline , x.UniqNo })
      .ToList();


var UpdatedRefs = context.customerslas.Where(c => jobRefs.Any(z=>z.job_ref == c.job_ref) &&
                                      (c.invoiced == 1 ||
                                       c.invoiced == 2) &&
                                       c.active == 1)
                                       .Select(c => c.job_ref)
                                       .ToList();

得到这个错误

无法创建“匿名类型”类型的常量值。此上下文仅支持原始类型或枚举类型。'

【问题讨论】:

  • 摆脱tolist。
  • 删除第一个查询中的 ToList()
  • 看到你接受你的陈述的答案查询另一个数据库不可能是真的。
  • 对不起,我想我想说的是不同的表格

标签: c# entity-framework


【解决方案1】:

第一个查询中的 ToList() 将数据提取到内存中的集合中,而第二个查询(您比较数据的位置)在数据库中。要解决这个问题,您需要将它们放在同一区域,无论是数据库还是内存。

推荐的最简单方法是从第一个查询中删除 ToList()

var jobRefs = context.jobs.Where(j => j.LSM_Status == null &&
                                       j.despatched_time == null
                                       )
      .Select(x => new { x.job_ref, x.volumes_env, x.postout_deadline , x.UniqNo });


var UpdatedRefs = context.customerslas.Where(c => jobRefs.Any(z=>z.job_ref == c.job_ref) &&
                                      (c.invoiced == 1 ||
                                       c.invoiced == 2) &&
                                       c.active == 1)
                                       .Select(c => c.job_ref)
                                       .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多