2013-08-10 10 views
6

Próbuję uzyskać dane przechowywane w pamięci podręcznej. Ale zgłasza wyjątek w linii "select new FilterSsrsLog". Wyjątek: Funkcja ta może być wywołana tylko z LINQ do podmiotówwyjątek linq: Ta funkcja może być wywoływana tylko z LINQ do Entity

List<ExecutionLog3> reportServerDB = UpdateCache(); 
     var reportLog = (from r in reportServerDB 
         orderby r.TimeStart descending 
         where ((model.reportName == null ? true : r.ItemPath.Contains(model.reportName)) && 
          (model.reportFolder == null ? true : r.ItemPath.Contains(model.reportFolder)) && 
          (r.TimeStart >= startDateTime) && 
          (r.TimeStart <= endDateTime) 
         ) 
        select new FilterSsrsLog 
        { 
         UserName = r.UserName, 
         ReportName = r.ItemPath, 
         ReportFolder = r.ItemPath, 
         Format = r.Format, 
         Parameters = r.Parameters, 
         TimeStart = r.TimeStart, 
         TimeEnd = r.TimeEnd, 
         TotalTime = EntityFunctions.DiffMilliseconds(r.TimeStart, r.TimeEnd) 
        }); 

jeśli usunąć „wybierz nowy FilterSsrsLog” blok kodu i napisać „wybrać R” to działa. Ale potrzebuję tylko tych kolorów, więc co mogę zrobić, aby rozwiązać ten problem?

Odpowiedz

9

Powodem tego błędu jest to, że zapytanie jest wykonywane w pamięci, a nie w RDBMS. Funkcja DiffMilliseconds jest znacznikiem, który dostawca Entity Framework konwertuje na SQL specyficzny dla RDBMS, aby wysłać go do RDBMS. Funkcja nie oblicza swojego wyniku po zastosowaniu do pamięci IQueryable<T>, zamiast tego zgłasza wyjątek.

Jeśli chcesz uruchomić tę kwerendę w pamięci, wymienić

TotalTime = EntityFunctions.DiffMilliseconds(r.TimeStart, r.TimeEnd) 

z

TotalTime = (r.TimeEnd - r.TimeStart).TotalMilliseconds 

odejmowanie dwóch dat wytwarza wartość TimeSpan z którego można wziąć swój TotalMilliseconds nieruchomości.

+0

Czy to nie byłby TotalMilliseconds? –

+1

@ It'sNotalie. Ach, masz rację, powinno to być 'TotalMilliseconds'. Dzięki! – dasblinkenlight

+0

@dasblinkenlight Dziękuję bardzo, działa. –

Powiązane problemy