Не удалось разрешить свойство для отображаемого объекта Average linq в NHibernate - PullRequest
1 голос
/ 28 июля 2011

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

Сообщение об ошибке: не удалось разрешить свойство: DateClosed.DateCreated of: 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 Ответ

1 голос
/ 28 июля 2011

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

x.DateClosed - x.DateCreated

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

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

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

...