我在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.Device
和LightSwitchApplication.Device
之间的这种混淆!我究竟做错了什么?
或者在LightSwitch中这种调用是不可能的?
答案 0 :(得分:0)
linq2sql中不支持内联代码 - 它只是想象力;)。
当您在幕后执行'item.Trim()'时,这将转换为SQL命令LTRIM(RTRIM(item))
您可以在MSSQL中查看视图。