0

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

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

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

当我提供列表时,上面实际上确实有效,但是在它为空的情况下,我得到:

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

还尝试将其与字符串数组一起使用:

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

是否有可能在不必建立谓词的情况下拥有这样的条件(这是一个更大的努力)?

4

2 回答 2

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
于 2012-08-23T17:05:17.037 回答
0

I'm using EF5, something like this will fix the issue:

ent.myEntities.ToList().Where(t => SelectedProperties == null || SelectedProperties.Contains(t.Entity));
于 2014-08-26T09:21:09.697 回答