Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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
C# 实体的IQueryable。其中(属性位于本地数组中)_C#_.net_Linq_Entity Framework_Entity Framework 5 - Fatal编程技术网

C# 实体的IQueryable。其中(属性位于本地数组中)

C# 实体的IQueryable。其中(属性位于本地数组中),c#,.net,linq,entity-framework,entity-framework-5,C#,.net,Linq,Entity Framework,Entity Framework 5,所以我知道iQueryables被转换成SQL语句,因此无法处理所有可能放入where子句的方法 但这就是我想做的: int[] alreadySelectedIds = ... var subjects = Entities.NewInstance.Subjects.Where(x => Array.IndexOf(alreadySelectedIds, x.Id) == -1).ToList(); 阅读下面这样的帖子,我很欣慰EF5能够翻译这些内容。 但是,我遇到了以下错误: L

所以我知道iQueryables被转换成SQL语句,因此无法处理所有可能放入where子句的方法

但这就是我想做的:

int[] alreadySelectedIds = ...
var subjects = Entities.NewInstance.Subjects.Where(x => Array.IndexOf(alreadySelectedIds, x.Id) == -1).ToList();
阅读下面这样的帖子,我很欣慰EF5能够翻译这些内容。

但是,我遇到了以下错误:

LINQ to实体无法识别方法“Int32” IndexOf[Int32](Int32[],Int32)'方法,并且此方法不能为空 翻译成商店表达式

谷歌搜索这个错误并没有给我多少帮助

我也试过了

var newSubjects = Entities.NewInstance.Subjects.Where(x => alreadySelectedIds.Contains(x.Id)).ToList();
无法创建“System.Int32[]”类型的空常量值。只有 中支持实体类型、枚举类型或基元类型 这个背景

List alreadyselecteds=。。。
无法创建“System.Collections.Generic.List`1”类型的空常量值。在此上下文中仅支持实体类型、枚举类型或基元类型

我被卡住了,我的大脑变得糊状,无法进行任何形式的优雅恢复。有人能救我吗

Entities.NewInstance.Subjects.Where(x => alreadySelectedIds.Contains(x.Id)).ToList();
如果
alreadySelectedIs
不为空,则应工作

您可以在查询内部或之前执行空检查:

Entities.NewInstance.Subjects.Where(x => alreadySelectedIds == null 
                                         ? true // or false 
                                         : alreadySelectedIds.Contains(x.Id)
                                    ).ToList();
(如果
alreadyselecteds
为空,则可以重写该属性,具体取决于您想要全部还是什么都不想要)


一个人如何在一个简单的问题上徒劳地挣扎,真是太神奇了,因为正确理解这个问题的道路在绝望和理智的恐慌中迷失了。但是一个人除了做人还能做什么呢?@Alex对于计算机科学来说哲学太多了;)但是的确
Entities.NewInstance.Subjects.Where(x => alreadySelectedIds == null 
                                         ? true // or false 
                                         : alreadySelectedIds.Contains(x.Id)
                                    ).ToList();
//return all if null
x => alreadySelectedIds == null || alreadySelectedIds.Contains(x.Id)
//return nothing if null
x => alreadySelectedIds != null  && alrreadySelectedIds.Contains(x.Id)