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

Leo*_*ger 3 c# asp.net-web-api angularjs breeze breeze-sharp

我使用breeze谓词实现过滤器.使用BreezeJs和ASP.NET WebAPI(Breeze Server Side)和Entity Framework

谓词看起来像这样:

var predicate = breezeProvider.breeze.Predicate.create('serialNumber', '==', $scope.filter.serialNumber);
predicates.push(predicate);
Run Code Online (Sandbox Code Playgroud)

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

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

$ 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;
}
Run Code Online (Sandbox Code Playgroud)

我试图找出如何解决这种情况,但不知道.

任何帮助表示赞赏

Jit*_*Joy 6

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

我能够通过附加.toType("entityTypeName")到breeze查询来解决这个问题.

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


query = query.where(predicate).toType("Order");
Run Code Online (Sandbox Code Playgroud)