2
我在設計查詢的方法擴展查詢時遇到問題。PreprocessQuery()
LightSwitch
查詢的方法。使用代理LINQ的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中根本無法實現?
感謝您的回答。 我現在用一個解決方法解決了這個問題,其中我在表中添加了一個新字段,其中日期滴答被存儲爲long int。這與原來的DateTime字段並行管理...不是很好,但工作很好,很容易。 – Satria