为什么我的查询出错?

时间:2016-10-27 12:40:39

标签: c# entity-framework

我使用实体框架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    

知道怎么解决吗?

5 个答案:

答案 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>();
  1. 修正了你的整数数组。
  2. 删除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