我写过以下lambda表达式
Expression<Func<ContractObject, bool>> objExpression =
i => i.ContractProjects.Any(a => ProjectList.Any(p => p.Id == a.ProjectId));
ContractProjects
和ProjectList
是共享公共值的两种不同类型的列表,即。分别是ProjectId和Id。
但它正在抛出以下异常。我是否需要做任何更改,或者可以用其他方式编写此表达式?
无法创建类型为'System.Collections.Generic.List`1'的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。
答案 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)));
感谢您的帮助