我使用实体框架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
知道怎么解决吗?
答案 0 :(得分:1)
扩展方法Contains(this IEnumerable<int?> source, int value?):bool
不接受List<int>
或List<int?>
,但在这种情况下只接受Nullable int
又名int?
答案 1 :(得分:1)
问题在于你的声明,以下代码对我来说很好:
int someValue=1;
int?[] regionTypeId = { 1, 2, 3 };
if (regionTypeId.Contains(someValue))
{
// code here
}
答案 2 :(得分:0)
您收到此错误是因为您尝试执行int?[].Containts(List<int>)
。下次指定您的整个错误。
&#39; INT []&#39;不包含&#39;包含&#39;的定义最好的 扩展方法重载 &#39; Queryable.Contains&gt;(IQueryable&gt;,List)&#39; 需要一个类型为“IQueryable&gt;&#39;
的接收器
为什么不将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>();
答案 3 :(得分:0)
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>();
ToList
,将在数据库服务器上评估包含块。答案 4 :(得分:0)
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
。