C# 实体的IQueryable。其中(属性位于本地数组中)
所以我知道iQueryables被转换成SQL语句,因此无法处理所有可能放入where子句的方法 但这就是我想做的: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
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)