Почему вы анализируете строки в выражении LINQ? Весь смысл LINQ состоит в том, чтобы этого избежать.
var q = from p in this.repository.GetQueryable<Party>() select p;
if (startDate.HasValue || endDate.HasValue)
{
var searchStartDate = startDate.HasValue ? startDate.Value : DateTime.MinValue;
var searchEndDate = endDate.HasValue ? endDate.Value : DateTime.MaxValue;
return
q.Where (p=> p.Date >= searchStartDate.ToUniversalTime()
&& p.Date <= searchEndDate.ToUniversalTime()).ToList();
}
return q.ToList();
UPDATE:
В ответ на комментарии: я создаю это во время выполнения. Вопрос не во время выполнения против времени компиляции; это "в строках" против "в коде". StringBuilder позволяет добавлять текст; LINQ позволяет связать Lamdbas. Все работает одинаково - за исключением того, что ваш код является типобезопасным, а синтаксис проверяется с помощью лямбды.
Чтобы еще больше продемонстрировать эту концепцию, следующий код компилируется и работает нормально и позволяет вам изменять предложение Where на основе значений oddsOnly
и lowerLimit
.
int[] nums = {1,2,3,4,5,6,7,8,9,10};
bool oddsOnly = true;
bool lowerLimit = 5;
var q = from i in nums select i;
if (oddsOnly)
q = q.Where( n=> n%2 == 1);
if (lowerLimit != 0)
q = q.Where( n=> n >= lowerLimit);
foreach(var i in q)
Console.WriteLine(i);
В зависимости от того, как вы установите эти значения, он будет использовать ноль, один или оба предложения where.