2013-03-12 11 views
5

To jest mój kod:Entity Framework 5.0. Co jest nie tak z moim zapytaniem?

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; 
} 

jeśli zadzwonię contractsStartDate.Min() wystąpi wyjątek:

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. 

Co jest nie tak z moim Query?

  • contractsStartDate jest typu System.Data.Entity.Infrastructure.DbQuery

  • EF 5,0

  • databaseContext jest dzieckiem System.Data.Entity.DbContext

+1

@GalacticCowboy - JustAnotherUserYouMayKnow ma wierną odpowiedź) to było null :(Dziękuję!) – MikroDel

Odpowiedz

3

wiem, że to błąd. Po prostu upewnij się, że partnerNumbers nie ma wartości null. Podajesz wartość pustą dla tego parametru, ale Linq-to-entity nie może przetłumaczyć tej wartości na nic znaczącego.

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

Dodatkowym bonusem rada:

Jeśli SomeDateTime jest not nullable i nie istnieją żadne wpisy w swoim wyliczeniu, wtedy dostaniesz wyjątek na wywołanie Min(). Przesyłanie SomeDateTime do typu nullable w zapytaniu będzie działało, wtedy otrzymasz wartość null, gdy nie ma żadnych wpisów.

+0

Dziękuję - Zła teraz twoja rada teraz – MikroDel

+0

Dla przyszłego odniesienia, wskazówka była w wyjątku: zapytanie LINQ/EF zwraca ' IQueryable', a nie 'IEnumerable', więc parametr był jedynym oczywistym' IEnumerable' w zakresie. :) (No cóż, technicznie, 'IQueryable' jest także' IEnumerable', ale błąd pokaże najbardziej specyficzny typ.) – GalacticCowboy

+0

@GalacticCowboy - użyj "@" w komentarzach - jak "@GalacticCowboys" - niż Ill be poinformowany o nowych informacjach. Dziękuję za IQueryable i IEnumerable. Ale nie zrozumiałem tej "wskazówki" :) – MikroDel