表达式-无法创建类型为'System.Collections.Generic.List ' 1'的常量值

本文关键字:List Generic 常量 Collections System 类型 创建 表达式 | 更新日期: 2023-09-27 18:01:27

我写了以下lambda表达式

Expression<Func<ContractObject, bool>> objExpression = 
i => i.ContractProjects.Any(a => ProjectList.Any(p => p.Id == a.ProjectId));

ContractProjectsProjectList是具有相同值的两种不同类型的列表。投影和Id。

但是它抛出了以下异常。我需要做什么改变吗或者这个表达式可以用另一种方式写吗?

无法创建类型为'System.Collections.Generic.List ' 1'的常数值。在此上下文中只支持基本类型('如Int32, String和Guid')。

表达式-无法创建类型为'System.Collections.Generic.List ' 1'的常量值

我想问题是你的ContractList可能还没有创建

试题:

var objExpression = i => i.ContractProjects.ToList()
                          .Any(a => ProjectList.Any(p => p.Id == a.ProjectId));

经过多次尝试和错误,我得到了以下解决方案

List<Int32> projectIds = new List<Int32>();
foreach (Project p in ProjectList)
    projectIds.Add(p.Id);
Expression<Func<ContractObject, bool>> objExpression = 
i => i.ContractProjects.Any(a => projectIds.Contains(a.ProjectId)));

谢谢你的帮助