我的以下查询存在严重问题。
context.CharacteristicMeasures
.FirstOrDefault(cm => cm.Charge == null &&
cm.Characteristic != null &&
cm.Characteristic.Id == c.Id &&
cm.Line != null &&
cm.Line.Id == newLine.Id &&
cm.ShiftIndex != null &&
cm.ShiftIndex.Id == actShiftIndex.Id &&
(newAreaItem == null ||
(cm.AreaItem != null &&
cm.AreaItem.Id == newAreaItem.Id)));
当newAreaItem为null时,我得到
TargetException: Non-static method requires a target
。如果newAreaItem不为null,我得到一个
NotSupportedException: Unable to create a constant value of type 'PQS.Model.AreaItem'. Only primitive types or enumeration types are supported in this context.
我已经检查过的东西是否为空:
c,newLine,actShiftIndex所有3个变量都不为null,并且可以访问Id。
我不明白...请帮助。
如果您需要更多信息..请随时询问...
更新
我可以消除
NotSupportedException
,但是当newAreaItemIsNull为true时,我仍然会收到TargetException。bool newAreaItemIsNull = (newAreaItem == null);
var mc = context.CharacteristicMeasures
.FirstOrDefault(cm => cm.Charge == null &&
cm.Characteristic != null &&
cm.Characteristic.Id == c.Id &&
cm.Line != null &&
cm.Line.Id == newLine.Id &&
cm.ShiftIndex != null &&
cm.ShiftIndex.Id == actShiftIndex.Id &&
(newAreaItemIsNull ||
(cm.AreaItem != null &&
cm.AreaItem.Id == newAreaItem.Id)));
更新
我终于做到了。似乎查询解析无法解析我的
newAreaItem(IsNull)
,因为它不在某种程度上在数据库模型中!我必须拆分查询。
bool newAreaItemIsNull = (newAreaItem == null);
MeasureCharacteristic mc;
if (newAreaItemIsNull)
mc = context.CharacteristicMeasures
.FirstOrDefault(cm => cm.Charge == null &&
cm.Characteristic != null &&
cm.Characteristic.Id == c.Id &&
cm.Line != null &&
cm.Line.Id == newLine.Id &&
cm.ShiftIndex != null &&
cm.ShiftIndex.Id == actShiftIndex.Id);
else
mc = context.CharacteristicMeasures
.FirstOrDefault(cm => cm.Charge == null &&
cm.Characteristic != null &&
cm.Characteristic.Id == c.Id &&
cm.Line != null &&
cm.Line.Id == newLine.Id &&
cm.ShiftIndex != null &&
cm.ShiftIndex.Id == actShiftIndex.Id &&
cm.AreaItem != null &&
cm.AreaItem.Id == newAreaItem.Id);
有人知道更好的解决方案吗?
最佳答案
尝试将newAreaItem == null
移出查询
bool newAreaItemIsNull = (newAreaItem == null);
并在查询中将
newAreaItem == null
替换为newAreaItemIsNull
。查询解析器只能对数据库中的对象进行操作,而newAreaItem不是其中之一。
关于c# - EF非静态方法需要目标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15498981/