2011-11-22 50 views
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.DeviceLightSwitchApplication.Device之間這種混亂!我究竟做錯了什麼? 或者這種通話在LightSwitch中根本無法實現?

回答

0

linq2sql中的內聯代碼不支持 - 它只是想象力;)。

當你做的東西爲「item.Trim()」在幕後,這將是轉換爲SQL命令LTRIM(RTRIM(項目))

您可以在MSSQL檢查意見。

+0

感謝您的回答。 我現在用一個解決方法解決了這個問題,其中我在表中添加了一個新字段,其中日期滴答被存儲爲long int。這與原來的DateTime字段並行管理...不是很好,但工作很好,很容易。 – Satria