意外 - 无法比较“System.Int32 []'类型的元素。仅支持基本类型,枚举类型和实体类型

时间:2015-09-11 03:50:19

标签: c# .net entity-framework lambda

任何想法在EF DbContext查询中可能出现的问题是什么?据我所知,这应该按照fellow SO poster进行。

我已尝试过列表,无效,无空检查,但无济于事。但是,如果我删除空检查并离开Contains(),查询确实有效。但是,如果testID为null,则需要返回所有记录。

var testIDs = new int[] { 1, 3 };
var test = session.All<VendorBooking>(x => testIDs == null || testIDs.Contains(x.VendorServiceID)).ToList();

(session.All只使用context.Set<T>.Where()

  

抛出异常:&#39; System.NotSupportedException&#39;在   EntityFramework.SqlServer.dll

     

附加信息:无法比较类型的元素   &#39; System.Int32 []&#39 ;.只有原始类型,枚举类型和实体   支持类型。

enter image description here

非常感谢

3 个答案:

答案 0 :(得分:5)

这样的事可能。此外,您可以提取常用部分并缩短它们。

var testIDs = new int[] { 1, 3 };
if (testIDs == null)
{
    var test = session.All<VendorBooking>()
        .ToList();
}
else
{
    var test = session.All<VendorBooking>(x => testIDs.Contains(x.VendorServiceID))
       .ToList();
}

答案 1 :(得分:0)

testIds 无法为空,请尝试使用

var testIDs = new int[] { 1, 3 };
var test = session
   .All<VendorBooking>(x => testIDs.Contains(x.VendorServiceID))
   .ToList();

<强>修

var results = (testIds == null || testIds.Length == 0)
  ? session.All<VendorBooking>()
  : session.All<VendorBooking>(x => testIDs.Contains(x.VendorServiceID));
var test = results.ToList();

答案 2 :(得分:0)

    var test = session.All<VendorBooking>(x => testIDs.Contains()==0 || 
    testIDs.Contains(x.VendorServiceID)).ToList();

这通常有效。不要被OR运算符弄糊涂,因此只有一个条件必须true才能使完整表达式为true。当任何值传递给testIDs.Contains(x.VendorServiceID)时,true评估为testIDs,否则当传递null时testIDs.Contains()==0为真。