Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 实体框架:任意或全部-无法创建类型为';System.Collections.Generic.List`1';_Linq_Entity Framework - Fatal编程技术网

Linq 实体框架:任意或全部-无法创建类型为';System.Collections.Generic.List`1';

Linq 实体框架:任意或全部-无法创建类型为';System.Collections.Generic.List`1';,linq,entity-framework,Linq,Entity Framework,我正在尝试这样做: from t in ent.myEntities where SelectedProperties == null || SelectedProperties.Any(le => le == t.Entity) select t var query = ent.myEntities; if (SelectedProperties != null) { query = query.Where(t => SelectedProperties.Any(x =&

我正在尝试这样做:

from t in ent.myEntities
where SelectedProperties == null || SelectedProperties.Any(le => le == t.Entity)
select t
var query = ent.myEntities;
if (SelectedProperties != null)
{
    query = query.Where(t => SelectedProperties.Any(x => x == t.Entity));
}
if (SomethingElse)
{
    query = query.Where(...);
}
// etc
基本上试着涵盖2个案例。接受空列表时,应返回所有实体,或在列表上筛选(如果提供)

当我提供列表时,上面的方法确实有效,但是如果列表为空,我会得到:

无法创建类型为的常量值 'System.Collections.Generic.List'1'。只有基元类型('例如 在此上下文中支持Int32、String和Guid')

还尝试将其用于字符串数组:

where arr == null || arr.Contains(t.Entity)
有没有可能在不必构建谓词的情况下获得这样的条件(这是一项更大的工作)

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

where SelectedProperties == null || SelectedProperties.Contains(t.Entity)
这可能不管用,但值得一试。否则,如果这真的是您的整个查询,我只会这样写:

var query = SelectedProperties == null 
            ? ent.myEntities
            : ent.myEntities.Where(t => SelectedProperties.Contains(t.Entity));
编辑:好的,如果你必须使用
Any
,并且有很多这样的东西要写,你可以这样做:

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

我使用的是EF5,类似这样的东西可以解决这个问题:

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

谢谢你,乔恩!我无法使用.Contains,因为它似乎不受EF支持。至于第二个例子,这并不理想,因为我要检查的属性不止一个。。所以我需要为提供的每个元素组合创建一个单独的查询。@SonicSoul:不,您可以轻松地组合查询。我会编辑这篇文章来告诉你我的意思。谢谢乔恩!查询周围的条件将起作用,但糟糕的是,如果我检查2个变量是否为null,我需要定义这个查询4次。(检查a是否为非b或a&b或b是否为非a或b是否为非a)等。。不理想。。使用谓词生成器可能会更好。。我在另一个项目中实施了。。我只是希望在上面这样一个看似简单的用例中,我不必求助于它。。真的不认为EF就是这么回事吗usable@SonicSoul:为什么需要定义它四次?在我的编辑中,使用查询组合的代码有什么问题?问题是,我只能在提供的列表不为null的情况下使用它(因为如果| |的另一端是列表,EF似乎无法执行null检入查询。任何)。。所以我需要对所有可用参数的组合进行单独的查询。当两个都提供、一个提供、另一个提供或非提供时的单独查询EF LINQ支持非常差。这太遗憾了,因为LINQtoSQL可以做所有这些事情,但它已经被弃用了。这太遗憾了。希望EF4.5Is
SelectedProperties
a
List
,以及
T
原语类型,如
int
,能够提供更多的支持?或者它到底是什么类型的?是的,它是一个列表