1

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

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

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

我似乎在微风.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 查询的客户端运算符,我可以在服务器上拦截并注入适当的谓词吗?

4

1 回答 1

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 运算符会很棒;-)

于 2013-09-18T18:02:54.690 回答