我有一个实体,其字段定义为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>
并没有帮助。同样的错误。