检测到具有不兼容类型的二元运算符。找到操作数类型edm.string和edm.guid用于种类相等

时间:2015-09-30 17:50:08

标签: c# angularjs asp.net-web-api breeze breeze-sharp

我使用breeze谓词实现过滤器。使用带有实体框架的BreezeJs和ASP.NET WebAPI(Breeze服务器端)

谓词看起来像这样:



var predicate = breezeProvider.breeze.Predicate.create('serialNumber', '==', $scope.filter.serialNumber);
predicates.push(predicate);




当我执行查询时。 Breeze使用以下消息抛出异常:

  

检测到具有不兼容类型的二元运算符。找到操作数类型edm.string和edm.guid for kind equal

$ scope.filter.serialNumber是一个字符串,serialNumber是一个GUID属性

网址如下。

  

http://localhost:51969/breeze/WarehouseProductTransactions/GetProducts?$ filter =(StatusId ne 3d)和(WarehouseId eq 1d)和(AuthorizedADUserId eq' bTdbnW8t6Uu4D4KHCoQOhg ==')和(SerialNumber eq guid' 1b9d065e-eb48 -4f3d-883C-2c841771a3e8')及$的OrderBy =编号&安培; $顶部= 5&安培; $扩大=库存,AuthorizedADUser&安培; $ inlinecount =所有页&安培;)

请注意代码段:

  

(SerialNumber eq guid' 1b9d065e-eb48-4f3d-883c-2c841771a3e8')

我的服务器端如下:

[EnableBreezeQuery(MaxNodeCount = 200)]
public IQueryable<WarehouseProductTransactionDetail> GetProducts()
{
    return _contextProvider.Context.WarehouseProductTransactionDetails;
}

我试图弄清楚如何解决这种情况,但不知道。

感谢任何帮助

1 个答案:

答案 0 :(得分:6)

在Breeze查询中比较userId时遇到了同样的问题。 Breeze在OData查询中附加'guid'。

我可以通过将.toType("entityTypeName")附加到微风查询来解决此问题。

let query = new breeze.EntityQuery().from('orders');          
let predicate = breeze.Predicate.create("CreatedBy", "==", userId);


query = query.where(predicate).toType("Order");