表达式 - 无法创建类型为“System.Collections.Generic.List`1”的常量值。只有原始类型('如Int32,String和Gu

时间:2015-07-08 08:08:42

标签: c# linq lambda

我写过以下lambda表达式

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

ContractProjectsProjectList是共享公共值的两种不同类型的列表,即。分别是ProjectId和Id。

但它正在抛出以下异常。我是否需要做任何更改,或者可以用其他方式编写此表达式?

  

无法创建类型为'System.Collections.Generic.List`1'的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。

2 个答案:

答案 0 :(得分:1)

我认为问题是您的ContractList可能尚未创建

尝试:

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

答案 1 :(得分:1)

经过多次反复试验后,我得到了以下解决方案

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

感谢您的帮助