Хотелось бы что-нибудь подобное для вас?
cri.Add(Expression.Ge("Duration.DateFrom", new Date(fromYear, 1, 1));
cri.Add(Expression.Le("Duration.DateTo", new Date(toYear, 12, 31));
Обратите внимание, что я изменил ваш порядок выражений - я предполагаю, что вы сделали опечатку и хотите запросить даты между DateFrom и DateTo. Если даты содержат данные о времени, второе выражение изменится на:
cri.Add(Expression.Lt("Duration.DateTo", new Date(toYear + 1, 1, 1));
В ответ на комментарий:
cri.Add(Expression.Ge("Duration.DateFrom", new Date(fromYear, fromMonth, 1));
// Actual code needs to get last day of to month since it will not always be 31
cri.Add(Expression.Le("Duration.DateTo", new Date(toYear, toMonth, 31));
Ваш пользователь вводит данные в форме "ГГММ"? Если это так, то вам просто нужно проанализировать год и месяц из этой строки, чтобы создать из года, месяца и т. Д.
Редактировать: моя 3-я и последняя попытка:
// First parse the input, e.g: september 2009 into 9 (inMonth) and 2009 (inYear)
var fromDate = new DateTime(inYear, inMonth, 1);
var toDate = fromDate.AddMonths(1).AddDays(-1);
cri.Add(Expression.Ge("Duration.DateFrom", fromDate));
cri.Add(Expression.Le("Duration.DateTo", toDate));