Я использую типы XRM (ранней привязки) в проекте WCF, поэтому у меня есть доступ к модели CRM и я могу использовать запросы LINQ. Но я бег в a problem described here, это ограничение на пункте where
специфичное для XRM LINQ:Nullable filters in XRM where where
где [оговорка ограничения]
Левая сторона пункта должна быть именем атрибута и правая сторона должно быть значением. Вы не можете установить левую сторону в константу. Как стороны предложения не могут быть константами.
Поддерживает функции String Содержит, запускает с, имеет значение EndsWith и Equals.
Одно требование, которое продолжает выскакивать, - это , когда параметр имеет значение null, все объекты должны быть возвращены в противном случае фильтром по параметру. Но я не могу придумать способ сделать это, не нарушая вышеприведенных требований, или писать несколько запросов для обработки сценария, когда он равен нулю.
это пример одного из моих запросов, проблема typeFilter == null
заключается в том, что я использовал константу на LHS. В моем реальном коде есть предложение охраны, которое указывает typeFilter == null
на другой запрос, но теперь мне нужно добавить фильтр даты начала и окончания (оба значения с нулевым значением), и я не могу выразить, насколько я не хочу написать запрос для каждой комбинации нулевых значений.
private IQueryable<EventInfo> getAllEvents(DataContext context, EventType? typeFilter)
{
return (
from evt in context.new_eventSet
where
(evt.statecode == new_eventState.Active) &&
(typeFilter == null || evt.new_EventType.Value == (int) typeFilter.Value)
select new EventInfo()
{
ID = evt.Id,
EventType = (EventType) evt.new_EventType.Value
...
});
}
проблема в настоящее время я должен добавить фильтр даты начала/окончания в дополнение к типу фильтра. записывая запрос 4 раза с помощью if/else для обработки дополнительных фильтров, немного больше –
фактически более 3 раз, так как я думаю, что вам понадобится каждая комбинация –
Я не думаю, что вам нужны скобки в * return * заявление. –