2011-07-28 1 views
1

У меня есть код, который вычисляет среднее количество дней с даты открытия до закрытия. Когда я запускаю выражение, используя выражение Linq и лямбда-я получаю ошибку следующим образом: сообщениеНевозможно разрешить свойство для Среднее значение linq для сопоставленного объекта NHibernate

Ошибка: не удалось разрешить свойство: DateClosed.DateCreated из: TestProject.LegalWork

где код:

var result = Repository.All 
      .Where(x => x.DateClosed != null) 
      .Average(x => ((DateTime)x.DateClosed - x.DateCreated).TotalDays); 

Как всегда, когда я запускаю этот цикл и фильтр только при условии, все работает нормально.

int number= 0; 
decimal totalDays = 0; 
foreach (LegalWork legalWork in Repository.All.Where(x => x.DateClosed != null)) 
{ 
    totalDays += (decimal)((DateTime)legalWork.DateClosed - legalWork.DateCreated).TotalDays; 
    number++; 
} 
return (totalDays == 0 || numberOfLegalWork ==0) ? 0 : Convert.ToDecimal(totalDays/numberOfLegalWork); 

Что не так в версии Linq и Lambda?

ответ

1

Я уверен, что вы не можете позвонить:

x.DateClosed - x.DateCreated 

givenDate.TotalDays или в linq2nhibernate, потому что вы должны вызвать определенную функцию DateTime, которая не является частью linq2nhibernate это часть рамки .net и его не реализуется в linq2nhibernate, но текущее сообщение об ошибке говорит другую вещь, чтобы решить ур проблемы в настоящее время и можно сделать:

var result = Repository.All.Where(x => x.DateClosed != null).ToList() 
    .Average(x => ((DateTime)x.DateClosed - x.DateCreated).TotalDays); 

, если есть проблема с выше код, пожалуйста, введите ур определение класса, , но уверен, что это ' s не лучшее решение, лучше написать хранимую процедуру и вызвать ее.

+0

Я бы предпочел не преобразовывать результаты в список, прежде чем запускать среднее по результату, если это возможно. – cpoDesign