为什么我在查询中出错
本文关键字:出错 查询 为什么 | 更新日期: 2023-09-27 18:15:19
我使用实体框架6。
我有这个阵列:
int?[] regionTypeId = [1,2,3];
在此查询中(linq to query(:
var t = (from sites in context.Set<Site>()
where regionTypeId.Contains(sites.Regions.Select(x=>x.RegionTypeId).ToList())
select sites).AsNoTracking<Site>();
我得到这个错误:
Error 15 'int?[]' does not contain a definition for 'Contains' and the best extension method overload 'System.Linq.ParallelEnumerable.Contains<TSource>(System.Linq.ParallelQuery<TSource>, TSource)' has some invalid arguments
知道怎么修吗?
扩展方法Contains(this IEnumerable<int?> source, int value?):bool
不接受List<int>
或List<int?>
,但在这种情况下只接受Nullable int
,也就是int?
问题出在您的声明上,以下代码对我来说很好:
int someValue=1;
int?[] regionTypeId = { 1, 2, 3 };
if (regionTypeId.Contains(someValue))
{
// code here
}
您收到此错误是因为您正在尝试执行int?[].Containts(List<int>)
。下次指定整个错误。
'int?[]"不包含"Contains"和最佳扩展方法过载'可查询。包含>(IQueryable>,List('需要类型为"IQueryable>"的接收器
为什么不把你的int?[]
变成int[]
并在linq中使用呢。
var result = regionTypeId.Where(x => x != null).Cast<int>().ToArray();
然后你的linq:
var t = (from sites in context.Set<Site>()
where result.Contains(sites.Regions.Select(x=>x.RegionTypeId).ToList())
select sites).AsNoTracking<Site>();
int[] regionTypeId = new int[] {1,2,3};
var t = (from sites in context.Set<Site>()
where regionTypeId.Contains(sites.Regions.Select(x=>x.RegionTypeId))
select sites).AsNoTracking<Site>();
- 修复了int数组
- 对于
ToList
,将在数据库服务器上评估包含块
Tinwor是唯一一个发现您没有执行预期。。。
regionTypeId.Contains(someInteger)
但是
regionTypeId.Contains(some IEnumerable<int>)
这显然是错误的参数。但他没有展示正确的替代方案,即
var t = from site in context.Set<Site>().AsNoTracking()
where site.Regions.Any(x => regionTypeId.Contains(x.RegionTypeId))
select site;
这检查站点是否至少有一个Region
,其RegionTypeId
在regionTypeId
中。