首页 > 后端开发 > C++ > 为什么我的 LINQ 查询失败并显示'无法创建类型的常量值...”?

为什么我的 LINQ 查询失败并显示'无法创建类型的常量值...”?

Linda Hamilton
发布: 2025-01-17 23:21:11
原创
113 人浏览过

Why Does My LINQ Query Fail with

LINQ 查询错误:“无法创建类型为 API.Models.PersonProtocol 的常量值。此上下文中仅支持原始类型或枚举类型”

本文将解决一个 LINQ 查询中出现的错误,该错误源于尝试在 SELECT 子句中创建类型为 API.Models.PersonProtocol 的常量值。此上下文中仅允许原始类型或枚举类型作为常量。

问题出在以下代码行:

<code class="language-csharp">personProtocol = (ICollection<personprotocol>) ppCombined
    .Where(a => a.personId == x.personId)
    .Select( b => new PersonProtocol()
     {
         personProtocolId = b.personProtocolId,
         activateDt = b.activateDt,
         personId = b.personId
     })</code>
登录后复制

此处,ppCombined 是一个内存中的 PersonProtocolType 对象集合。它无法直接与从数据库检索到的数据进行连接。

解决方案

为了解决此错误,需要将 ppCombined 的过滤和映射操作移到 SELECT 子句之外。以下是修改后的代码:

<code class="language-csharp">var persons = db.Favorites
    .Where(f => f.userId == userId)
    .Join(db.Person, f => f.personId, p => p.personId, (f, p) =>
        new // 匿名对象
        {
            personId = p.personId,
            addressId = p.addressId,   
            favoriteId = f.favoriteId,
        })
    .AsEnumerable() // 数据库查询在此结束,其余部分是内存中的查询
    .Select(x =>
        new PersonDTO
        {
            personId = x.personId,
            addressId = x.addressId,   
            favoriteId = x.favoriteId,
            personProtocol = ppCombined
                .Where(p => p.personId == x.personId)
                .Select(p => new PersonProtocol
                {
                    personProtocolId = p.personProtocolId,
                    activateDt = p.activateDt,
                    personId = p.personId
                })
                .ToList()
        });</code>
登录后复制

在这个修改后的查询中,ppCombined 集合首先在内存中进行过滤和映射,得到所需的 PersonProtocol 对象。然后,结果被赋值给 PersonDTO 对象的 personProtocol 属性。 通过将对 ppCombined 的处理移至 AsEnumerable() 之后,避免了在数据库查询中使用内存集合。 AsEnumerable() 将数据库查询结果转换为内存集合,之后的操作都在内存中进行,从而解决了原始错误。

以上是为什么我的 LINQ 查询失败并显示'无法创建类型的常量值...”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板