我在 WCF 项目中使用 XRM(早期绑定)类型,因此我可以访问 CRM 模型并且可以使用 LINQ 查询。但是我遇到了这里描述的问题where
,这是XRM LINQ 特定子句的限制:
where [条款限制]
子句的左侧必须是属性名称,子句的右侧必须是值。您不能将左侧设置为常数。子句的两边都不能是常数。
支持字符串函数 Contains、StartsWith、EndsWith 和 Equals。
不断弹出的一项要求是,当参数为空时,应返回所有实体,否则按参数过滤。但是我想不出一种方法来做到这一点,而不打破上述要求,或者编写多个查询来处理它为空的场景。
这是我的一个查询示例,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
...
} );
}