C# 意外-无法比较类型为';System.Int32[]和#x27;。仅支持基元类型、枚举类型和实体类型
你知道EF DbContext查询的问题是什么吗?据我所知,这应该是一个可行的办法 我试过列表,空的,非空的检查,都没有用。但是,如果我删除空检查并只保留C# 意外-无法比较类型为';System.Int32[]和#x27;。仅支持基元类型、枚举类型和实体类型,c#,.net,entity-framework,lambda,C#,.net,Entity Framework,Lambda,你知道EF DbContext查询的问题是什么吗?据我所知,这应该是一个可行的办法 我试过列表,空的,非空的检查,都没有用。但是,如果我删除空检查并只保留Contains(),查询确实有效。但是,如果testid为null,则需要返回所有记录 var testIDs = new int[] { 1, 3 }; var test = session.All<VendorBooking>(x => testIDs == null || testIDs.Contains(x.Vend
Contains()
,查询确实有效。但是,如果testid为null,则需要返回所有记录
var testIDs = new int[] { 1, 3 };
var test = session.All<VendorBooking>(x => testIDs == null || testIDs.Contains(x.VendorServiceID)).ToList();
var testIDs=newint[]{1,3};
var test=session.All(x=>testIDs==null | | testIDs.Contains(x.VendorServiceID)).ToList();
(session.All仅使用context.Set.Where()
)
在中引发异常:“System.NotSupportedException”
EntityFramework.SqlServer.dll
其他信息:无法比较类型的元素
“System.Int32[]”。仅原语类型、枚举类型和实体
类型是受支持的
非常感谢
testid
不能为空,因此请尝试此方法
var testIDs = new int[] { 1, 3 };
var test = session
.All<VendorBooking>(x => testIDs.Contains(x.VendorServiceID))
.ToList();
var testIDs=newint[]{1,3};
var测试=会话
.All(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();
var results=(testIds==null | | testIds.Length==0)
? 全体会议()
:session.All(x=>testIDs.Contains(x.VendorServiceID));
var test=results.ToList();
可能是这样的。此外,您还可以提取常用零件并将其缩短
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();
}
var testIDs=newint[]{1,3};
if(testIDs==null)
{
var test=session.All()
.ToList();
}
其他的
{
var test=session.All(x=>testIDs.Contains(x.VendorServiceID))
.ToList();
}
var test=session.All(x=>testIDs.Contains()==0 | |
testIDs.Contains(x.VendorServiceID)).ToList();
这是正常工作。不要被OR运算符弄糊涂,因此只有一个条件必须为
true
,完整表达式才能为true
<当任何值被传递到testIDs
时,code>testIDs.Contains(x.VendorServiceID)的计算结果为true
,否则testIDs.Contains()==0
在传递null时为true。您使用什么版本的EF和.net?EntityFramework v6.1.3(最新AFAIK),.NET 4.5.1如果排除此检查,我如何返回睾丸为空的所有记录?看起来@Backs有您的答案。谢谢Richard。我明白了。或者通过if/else将其附加到Where()子句。好主意。谢谢我对EF非常惊讶,我认为数组的空检查应该从根本上得到支持。@GONeale有时候EF很奇怪,yes@GONeale我想,我有一个想法,为什么会这样。在c#(.net)中,我们有集合(数组、列表等),但在sql server中没有集合。因此,linq2sql无法将集合传递给服务器以检查它是否为空。我认为在EF中准备查询时,它只会识别数组“testIDs==null”,并知道如何将其写入1=1或(1,2)
等。。在T-SQL中。我认为,如果英孚团队采用这一功能,这是可以做到的。
var test = session.All<VendorBooking>(x => testIDs.Contains()==0 ||
testIDs.Contains(x.VendorServiceID)).ToList();