Пользовательский запрос LightSwitch с LINQ с использованием делегатов не работает - PullRequest
2 голосов
/ 22 ноября 2011

У меня проблемы при разработке расширенного запроса в ... 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?

1 Ответ

0 голосов
/ 24 ноября 2011

В linq2sql нет поддержки встроенного кода - это просто воображение;).

Когда вы делаете что-то как item.Trim () за кулисами, это будет транслироваться в команду SQL LTRIM (RTRIM (item))

Вы можете проверить представления в MSSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...