实体框架:Any或All - 无法创建类型为'System.Collections.Generic.List`1'的常量值

时间:2012-08-23 17:00:25

标签: linq entity-framework

我正在尝试做这样的事情:

from t in ent.myEntities
where SelectedProperties == null || SelectedProperties.Any(le => le == t.Entity)
select t

基本上试图覆盖2个案例。接受一个空列表,应返回所有实体,或者如果提供,则过滤列表。

当我提供列表时,

实际上确实有效,但是当它为null时,我得到:

  

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

也尝试使用字符串数组:

where arr == null || arr.Contains(t.Entity)

是否可以拥有这样的条件而无需构建谓词(这是一个更大的努力)?

2 个答案:

答案 0 :(得分:1)

您可能希望尝试以更简单的方式使用列表:

where SelectedProperties == null || SelectedProperties.Contains(t.Entity)

它可能无法正常工作,但值得一试。否则,如果确实您的整个查询,我只需将其写为:

var query = SelectedProperties == null 
            ? ent.myEntities
            : ent.myEntities.Where(t => SelectedProperties.Contains(t.Entity));

编辑:好的,如果你必须使用Any,并且有很多这些要编写,你可以这样做:

var query = ent.myEntities;
if (SelectedProperties != null)
{
    query = query.Where(t => SelectedProperties.Any(x => x == t.Entity));
}
if (SomethingElse)
{
    query = query.Where(...);
}
// etc

答案 1 :(得分:0)

我使用EF5,这样的事情可以解决问题:

ent.myEntities.ToList().Where(t => SelectedProperties == null || SelectedProperties.Contains(t.Entity));