带有Postgres的EF Core无法转换Array.Contains()查询

时间:2020-02-24 09:26:52

标签: c# postgresql entity-framework-core

我有一个实体,其字段定义为GUID数组。而且我想知道数据库中是否存在某些行,其中哪个字段包含作为参数传递的值。
根据{{​​3}}的说法,我可以进行.Where(x => x.ArrayField.Contains(arg)).Where(x => x.ArrayField.Any(f => f == arg))(也可以将arg包装到单元素数组中并执行.Any(f => array.Contains(f)))调用。
但实际上我得到了:

System.InvalidOperationException: Error generated for warning 'Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning: The LINQ expression 'where {[x].Ids => Contains(Id_2)}' could not be translated and will be evaluated locally.'. This exception can be suppressed or logged by passing event ID 'RelationalEventId.QueryClientEvaluationWarning' to the 'ConfigureWarnings' method in 'DbContext.OnConfiguring' or 'AddDbContext'.

我的查询如下:

var entities = await context.Query<Entity>
    .Where(x => x.Ids.Contains(Id))
    .ToArrayAsync();

为什么错了?还是应该有一些额外的配置?
在数据库端定义为uuid[]的列。我不是Postgre专业人士,但是假设它足以存储数据库。

UPD :在C#端将该字段定义为IReadOnlyCollection<Guid>。这是翻译失败的原因吗?

UPD2 :将Ids类型更改为Guid[]IEnumerable<Guid>并没有帮助。同样的错误。

0 个答案:

没有答案