我使用XRM(早期綁定)類型在WCF的項目,所以我有機會到CRM模型,並可以使用LINQ查詢。但我一直運行到a problem described here,它是在where
條款的限制,具體到XRM LINQ:可空濾器where子句
其中[條款限制]
條款的左側必須是屬性名和 該條款的右側必須是一個值。您不能將左側設置爲常量。子句兩邊的 不能是常量。
支持字符串函數包含,StartsWith,的endsWith,和平等。
當一個參數爲空時,一個要求不斷彈出的要求是,否則應該返回所有實體,否則應該返回參數過濾。但我想不到在不違反上述要求的情況下執行此操作的方法,或者編寫多個查詢來處理該情況爲空時的方法。
這是我的查詢中的一個例子,該typeFilter == null
是這裏的問題是我用一個恆定的LHS。在我真正的代碼有指向typeFilter == null
到另一個查詢保護條款,但我現在必須添加一個開始/結束日期過濾器(兩者可爲空),我無法表達我是多麼不要編寫一個查詢每個組合的空白。
private IQueryable<EventInfo> getAllEvents(DataContext context, EventType? typeFilter)
{
return (
from evt in context.new_eventSet
where
(evt.statecode == new_eventState.Active) &&
(typeFilter == null || evt.new_EventType.Value == (int) typeFilter.Value)
select new EventInfo()
{
ID = evt.Id,
EventType = (EventType) evt.new_EventType.Value
...
});
}
問題是我現在必須除型過濾器添加一個開始/結束日期過濾器。編寫查詢與if/else語句來處理額外的過濾掉4次有點多 – 2013-03-21 11:47:41
實際上超過3次,因爲我認爲你需要每個組合 – 2013-03-21 11:47:58
我不認爲你需要的在括號*回報*聲明。 – 2013-03-21 21:39:21