У меня проблемы при разработке расширенного запроса в ... PreprocessQuery()
Методе запроса LightSwitch
.
Во-первых, я вам упрощенно говорю, что работает:
partial void NeedHelp_PreprocessQuery(bool Admin, ref IQueryable<Device> query)
{
// Some code...
query = query.Where<Device>(d => d.IsAvailable());
}
Запрос не показывает ошибку компиляции и делает то, что должен делать.
Теперь, когда я пытаюсь поместить логику в метод и использовать его делегат в запросе, также не возникает ошибка компиляции, но я получаю исключение. Вот код:
private bool Logic(Device TheDevice, bool Admin)
{
return Admin ? true : TheDevice.IsAvailable();
}
partial void NeedHelp_PreprocessQuery(bool Admin, ref IQueryable<Device> query)
{
// Some code...
Func<Device, bool, bool> LogicDelegate = new Func<Device, bool, bool>(this.Logic);
query = query.Where<Device>(d => LogicDelegate(d, Admin));
}
Исключение на немецком языке, я пытаюсь перевести существенное:
The expression is not supported. Expression:
Invoke(value(LightSwitchApplication.ApplicationDataService+<>c__DisplayClass4).LogicDelegate, d, value(LightSwitchApplication.ApplicationDataService+<>c__DisplayClass4).Admin)
Message of inner exception:
The type "ApplicationData.Implementation.Device" cannot be used for a parameter of type "LightSwitchApplication.Device".
Поскольку я использую только Device
, я не понимаю этой путаницы между ApplicationData.Implementation.Device
и LightSwitchApplication.Device
! Что я делаю неправильно?
Или такой вызов просто невозможен в LightSwitch?