【发布时间】:2013-03-21 11:04:55
【问题描述】:
我在 WCF 项目中使用 XRM(早期绑定)类型,因此我可以访问 CRM 模型并可以使用 LINQ 查询。但是我遇到了a problem described here,这是 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
...
} );
}
【问题讨论】:
标签: c# linq dynamics-crm-2011 dynamics-crm xrm