2013-12-06 1 views
0

В LightSwitch У меня есть событие PreprocessQuery следующим образом: (! На стороне HTMLClient)PreprocessQuery события в LightSwitch терпит неудачу

partial void ValidOrders_PreprocessQuery(ref IQueryable<Order> query) 
{ 
    query = query.Where(order => OrderIsValid(order)); 
} 

public bool OrderIsValid(Order order) 
{ 
    return true; 
} 

Это не удается с сообщением «метод не может быть пустым».

Но это работает отлично:

partial void ValidOrders_PreprocessQuery(ref IQueryable<Order> query) 
{ 
    query = query.Where(order => true); 
} 

Может кто-нибудь понять, почему?

Спасибо, Пол

ответ

2

Поставщик запроса показан только метод OrderIsValid, и как метод не уже составлен до IL она больше не может «смотреть на это», чтобы увидеть его реализации, как это было бы необходимо создать Expression объектов для его представления.

Есть несколько вариантов, которые у вас есть, начиная от встраивания метода, как вы сделали самому, или имея сам метод возвращает выражение, а не делать работу:

public Expression<Func<Order, bool>> OrderIsValid() 
{ 
    return order => true; 
} 

Это позволит вам написать:

partial IQueryable<Order> ValidOrders_PreprocessQuery(IQueryable<Order> query) 
{ 
    return query.Where(OrderIsValid()); 
} 

Как примечание стороны, я настоятельно советую вам не передать запрос по ссылке, а возвращает новый запрос вместо; это будет более идиоматическим подходом.

+0

Спасибо, Servy, это помогает. К слову: я согласен с вашим замечанием о передаче запроса по ссылке, но LightSwitch not me определяет прототип метода. –

+0

@Servy - вы не можете изменить параметры запроса каким-либо образом и не можете вернуть «новый запрос», как вы предлагаете. Единственным механизмом, который предоставляет LightSwitch, является «параметр запроса», который передается по ссылке. Поэтому, чтобы вернуть отфильтрованный набор объектов, вы должны вернуть результаты через предоставленный параметр запроса. Хотя это так, как вы описываете, вполне может быть более «идиоматическим» подходом, это не то, как LightSwitch делает вещи. –

+0

@YannDuran Если это единственный вариант, то пусть будет так; это действительно не изменяет важные части ответа, и это полезно для других читателей, у которых нет такого ограничения. – Servy

 Смежные вопросы

  • Нет связанных вопросов^_^