我收到此错误 “无法确定参数 $1 的数据类型”
我收到错误的 where 子句如下所示:
var result = from Table in model.Table
where (filter.XId.HasValue ? Table.XId == filter.XId: true)
select new TableEntity
{
ID = Table.XId
};
如果我的代码只是这样的“Table.X == filter.X”,它就可以工作...... 我该如何解决这个问题?
而且我只在使用 PostgreSQL 数据库时遇到这个问题....
最佳答案
首先了解该错误通常意味着什么。对 PostgreSQL 进行参数化查询时,所有参数都应在查询本身中引用。当您添加的参数多于查询中使用的参数时,通常会出现上述错误。
似乎当您使用任何用于 PosgreSQL 的 EF 提供程序将您的语句转换为 SQL 时,它创建的参数比需要的多。
通常,EF 提供程序可能很难像您使用的那样分析和正确解析语句,因此好的做法是使用在某种意义上“更接近”SQL 的语句。在您的情况下,“更接近”SQL 的等效查询是:
where (filter.XId == null || Table.XId == filter.XId)
如果你想根据过滤器的值生成不同的查询,你可以这样做:
var query = (IQueryable<Table>) model.Table;
if (filter.XId != null) {
query = query.Where(row => row.XId == filter.XId);
}
var result = query.Select(row => new TableEntity {
Id = row.XId
});
关于c# - PostgreSQL、Linq C# 错误 'could not determine data type of parameter $1',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37701482/