任何想法在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 ;.只有原始类型,枚举类型和实体 支持类型。
非常感谢
答案 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
为真。