J'ai de sérieux problèmes avec la requête suivante.
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)));
Je reçois un TargetException: Non-static method requires a target
lorsque newAreaItem est null . Si newAreaItem n'est pas null, je reçois un NotSupportedException: Unable to create a constant value of type 'PQS.Model.AreaItem'. Only primitive types or enumeration types are supported in this context.
Les choses que j'ai déjà vérifiées si elles sont nulles: C, newLine, actShiftIndex, les 3 variables ne sont pas nulles et l'ID est accessible.
Je ne comprends pas ... s'il vous plaît, aidez-moi.
Si vous avez besoin de plus d'informations .. n'hésitez pas à demander ...
METTRE À JOUR
Je pourrais éliminer la NotSupportedException
, mais j'ai quand même eu la TargetException quand mon newAreaItemIsNull est true ..: /
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)));
METTRE À JOUR
Je l'ai finalement fait. Il semble que l'analyse de la requête ne puisse pas analyser ma newAreaItem(IsNull)
car elle ne fait pas partie du modèle de base de données!? Je dois diviser mes requêtes ..
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);
Est-ce que quelqu'un connaît une meilleure solution?
Essayez de déplacer newAreaItem == null
en dehors de la requête
bool newAreaItemIsNull = (newAreaItem == null);
et remplacez newAreaItem == null
par newAreaItemIsNull
dans la requête.
L'analyseur de requêtes ne peut fonctionner qu'avec les objets de la base de données, et newAreaItem n'en fait pas partie.
J'ai eu exactement le même problème que lorsque newAreaItem == null
est vrai.
Le problème vient du fait que l'élément utilisé dans le LINQ ne peut pas être null. Ainsi, lorsque newAreaItem == null
est vrai, cela signifie que newAreaItem
est null et que l'erreur est renvoyée.
Tout ce que vous pouvez faire à mon avis est, après avoir vérifié newAreaItem == null
, de définir newAreaItem sur un nouvel objet vide de ce type si newAreaIteam
est null La condition newAreaItemIsNull
sera toujours en place, ainsi la
(cm.AreaItem != null && cm.AreaItem.Id == newAreaItem.Id)
dans votre code ci-dessous ne seront toujours pas évalués si newAreaItem
est null.
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)));