我正在尝试做这样的事情:
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)
是否可以拥有这样的条件而无需构建谓词(这是一个更大的努力)?
答案 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));