BreezeJS/ODATA:转换只能在实体类型上执行

Sam*_*Sam 2 javascript c# odata breeze

不确定这是否是Breeze或ODATA问题.

执行我的ODATA查询时出现以下错误:

The child type 'job.volume' in a cast was not an entity type. Casts can only be performed on entity types.

过滤器如下所示:

$ filter:(JobGroup/JobJobGroup/any(x1:x1/job.volume eq 10d))

where子句是使用JSON表示法构建的:

{ "jobGroup.jobJobGroup": { "any": { "job.volume": { "eq": 10 } } } }
Run Code Online (Sandbox Code Playgroud)

模型(仅相关部分):

public class WorkflowTask
{
    public virtual JobGroup JobGroup { get; set; }
}

public class JobGroup
{
    public virtual IList<JobJobGroup> JobJobGroup { get; set; }
}

public class JobJobGroup
{
    public virtual Job Job { get; set; }
    public virtual Guid JobId { get; set; }
    public virtual JobGroup JobGroup { get; set; }
    public virtual Guid JobGroupId { get; set; }
}

public abstract class Job
{
    public virtual Decimal Volume { get; set; }
}

public class JobEditing : Job
{

}
Run Code Online (Sandbox Code Playgroud)

它可能与Job类是抽象的有关吗?

小智 6

将JSON语法与任何谓词一起使用时,必须使用/而不是.成员访问.这是odata格式

所以JSON变成了:

{ "JobGroup.JobJobGroup": { "any": { "Job/Volume": { "eq": 10 } } } }
Run Code Online (Sandbox Code Playgroud)

您的odata查询将是:

$filter:(JobGroup/JobJobGroup/any(x1: x1/Job/Volume eq 10d))
Run Code Online (Sandbox Code Playgroud)

注意:次要问题可能是属性名称的大小写,它们应该与模型中的名称完全匹配.例如.Cap V for job/Volume.