使用委托使用LINQ的LightSwitch自定义查询不起作用

时间:2011-11-22 12:55:09

标签: delegates linq-to-entities visual-studio-lightswitch

我在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));
}

Exception是德语,我尝试翻译基本内容:

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.DeviceLightSwitchApplication.Device之间的这种混淆!我究竟做错了什么? 或者在LightSwitch中这种调用是不可能的?

1 个答案:

答案 0 :(得分:0)

linq2sql中不支持内联代码 - 它只是想象力;)。

当您在幕后执行'item.Trim()'时,这将转换为SQL命令LTRIM(RTRIM(item))

您可以在MSSQL中查看视图。