比较运算符在微风中

时间:2013-09-18 05:45:43

标签: c# linq entity-framework breeze

我正在尝试使用Breeze进行以下LINQ查询的道德等效:

db.Customers.Where(c => c.Key.CompareTo("ALFKI") > 0)

(意思是 - 返回Key(字符串值)“大于”ALFKI的所有客户。

我似乎无法在breeze.js的FilterQueryOp枚举中找到CompareTo运算符。

做类似

的事情
EntityQuery.from("Customers").where("Key", ">", "ALFKI") 

以EF熟悉的

失败
The binary operator GreaterThan is not defined for the types 'System.String' and 'System.String'.

有没有办法用微风做这种事情?如果没有,它是否是底层OData协议的限制,或者这是一个可以添加到Breeze的运算符?如果没有客户端操作符可以生成相应的LINQ查询,我可以在服务器上拦截并注入相应的谓词吗?

1 个答案:

答案 0 :(得分:0)

事实证明使用withParameters实现变通方法非常简单 - 就像这样:

var key = "ALFKI";
EntityQuery.from("Customers).withParameters({ Key: key })

...并像这样编写控制器动作:

[HttpGet]
public IQueryable<WebSession> WebSessions(string key)
{
    return _repository.Customers.Where(c => c.Key.CompareTo(key) > 0);
}

在微风中拥有这种灵活性是很好的。尽管如此,在某些时候获得剩余的LINQ运算符真是太棒了! - )