2013-03-12 2 views
5

Ceci est mon code:Entity Framework 5.0. Quel est le problème avec ma requête?

public DateTime GibSomeStartDate(IEnumerable<int> partnerNumbers, DateTime startTime) 
{ 
    var contractsStartDate = from contract in this.databaseContext.Contract 
           where partnerNumbers.Contains(contract.Pnr) 
           && contract.SomeDateTime >= startTime 
           select contract.SomeDateTime; 
} 

si j'appelle contractsStartDate.Min() une exception se produit:

Unable to create a null constant value of type 'System.Collections.Generic.IEnumerable`1'. Only entity types, enumeration types or primitive types are supported in this context. 

Quel est le problème avec ma requête?

  • le contractsStartDate est de type System.Data.Entity.Infrastructure.DbQuery

  • EF 5,0

  • databaseContext est enfant de System.Data.Entity.DbContext

+1

@GalacticCowboy - JustAnotherUserYouMayKnow a la bonne réponse) il était nul :(Merci!) – MikroDel

Répondre

3

Je sais que cette erreur. Assurez-vous simplement que partnerNumbers n'est pas null. Vous passez une valeur nulle pour ce paramètre, mais Linq-to-entities ne peut pas traduire cette valeur en valeur significative.

if (partnerNumbers == null) 
{ 
    throw new ArgumentNullException("partnerNumbers"); 
} 

Un conseil bonus supplémentaire:

Si SomeDateTime est not nullable et il n'y a aucune entrée dans votre énumération, vous obtiendrez une exception à appeler Min(). Coulée SomeDateTime au type nullable dans votre requête va fonctionner, alors vous obtenez null lorsqu'il n'y a pas d'entrées.

+0

Merci - Ill vérifier vos conseils maintenant – MikroDel

+0

Pour référence future, l'indice était dans l'exception: une requête LINQ/EF renvoie un ' IQueryable', pas un 'IEnumerable', donc le paramètre était le seul' IEnumerable' évident dans la portée. :) (Eh bien, techniquement, 'IQueryable' est aussi un' IEnumerable', mais l'erreur montrera le type le plus spécifique.) – GalacticCowboy

+0

@GalacticCowboy - veuillez utiliser "@" dans vos commentaires - comme "@GalacticCowboys" - que Ill be informé de nouvelles informations. Merci pour IQueryable et IEnumerable. Mais je n'ai pas compris cet "indice" :) – MikroDel