У меня есть небольшой пользовательский объект, определенный как:
public class TimeSeriesDefinition
{
public int classID;
public DateTime startTime;
public DateTime endTime;
}
Я передаю список ClassIDs, List startTimes и List endTimes в функцию RIA Domain Service.В порядке организации я сгруппировал эти значения в List of TimeSeriesDefinitions, а затем попытался использовать цикл foreach для создания выражения, которое будет выбирать с помощью операторов AND между значениями в классе и операторов OR между каждым классом или реализовывать "..Any "запрос, как предложено первым ответом, который я получил ниже.Проблема в том, что я не могу использовать класс TimeSeriesDefinition в функции DomainService, потому что это не примитивный тип или один из моих типов сущностей (может быть, я должен просто создать сущность с этим типом?), Поэтому мне нужен другой метод достиженияжелаемые результаты запроса.Моя оригинальная идея использования выражений, с которыми я никогда не получал, заключается в следующем:
Expression<Func<EventLog, bool>> bounds;
Boolean assignedBounds = false;
foreach (TimeSeriesDefinition ts in reporters)
{
if (assignedBounds.Equals(false))
{
bounds = c => c.reporterID == ts.classID && c.reportDateTime >= ts.startTime && c.reportDateTime <= ts.endTime;
assignedBounds = true;
}
else
{
Expression<Func<EventLog, bool>> newBounds = c => c.reporterID == ts.classID && c.reportDateTime >= ts.startTime && c.reportDateTime <= ts.endTime;
bounds = Expression.Or(Expression.Invoke(bounds), Expression.Invoke(newBounds);
// bounds = Expression<Func<EventLog, bool>>.Or(bounds, newBounds);
}
}
return this.ObjectContext.EventLog.Where(bounds);
Моя цель - чтобы в наборе результатов были все записи ts.classID между ts.startDate и ts.EndDate.Из того, что я обнаружил в Интернете, кажется, что убедиться, что параметры правильно назначены, тоже сложно, но сейчас я все еще получаю
"Не могу неявно преобразовать тип" System.Linq.Expressions.BinaryExpression 'to' System.Linq.Expressions.Expression> '"
ошибка в строке
bounds = Expression.Or(Expression.Invoke(bounds), Expression.Invoke(newBounds);
Может кто-нибудь указать мне правильное направление?Я полагаю, что мог бы как-то встроить все это в строку запроса, но я бы предпочел не идти туда.
Заранее спасибо за понимание!