【问题标题】:The LINQ expression node type 'NewArrayBounds' is not supported in LINQ to EntitiesLINQ to Entities 不支持 LINQ 表达式节点类型“NewArrayBounds”
【发布时间】:2017-05-08 19:52:03
【问题描述】:
 select new ProviderMeta
            {
                LoginId = user.LoginId,
                AgencyId = user.AgencyId,
                Application = user.Application,
                UserId = user.UserId,
                Name = agencySnapshot.Name,
                Roles = new int[0],
                Cluster = app.ClusterId ?? 0,
                Created = app.Created,
                TitleType = user.TitleType,
                Feature = (foundFeature == null ? 0 : foundFeature.Feature)
            }).ToList();

这里,Roles 是一个整数数组,但它不允许我分配一个空数组 与零。 帮助将不胜感激。

【问题讨论】:

  • 你所说的“空数组为零”是什么意思?您要的是一个空的、长度为零的整数数组,还是一个具有单个零值元素的整数数组?
  • 抱歉给您带来了困惑。它的整数数组,单个元素的值为零
  • 那么你需要new int[1] 或者new int[] { 0 } 吗?如果您的 LINQ 正在被转换为 SQL 查询,我仍然可以看到它不受支持,尽管它似乎在 LINQ to SQL 中对我有用。您可以尝试创建一个临时变量 (var emptyRoles = new int[] { 0 };) 并使用它。
  • 在投影到具有不可翻译表达式的自定义类型之前,使用 ToList() 或 AsEumerable() 终止 EF 查询。
  • @octavioccl 嘿,稍后添加构造函数。感谢您的建议。

标签: c# arrays entity-framework linq linq-to-entities


【解决方案1】:

在类的空构造函数中初始化数组:

public class ProviderMeta
{
    //...
   public ProviderMeta()
   {
     Roles = new int[]{0};
   }
}

并将其从投影中移除

 select new ProviderMeta
        {
            LoginId = user.LoginId,
            AgencyId = user.AgencyId,
            Application = user.Application,
            UserId = user.UserId,
            Name = agencySnapshot.Name,
            //Roles = new int[0], remove this line
            Cluster = app.ClusterId ?? 0,
            Created = app.Created,
            TitleType = user.TitleType,
            Feature = (foundFeature == null ? 0 : foundFeature.Feature)
        }).ToList();

【讨论】:

  • 对不起,它不工作。我相信这是 Linq 的问题,而不是构造函数。
  • 但是您是否删除了查询投影中的数组初始化?
  • 是的,在你提出解决方案后我尽快做了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多