我收到此错误"could not determine data type of parameter $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数据库来解决这个问题....
答案 0 :(得分:2)
首先讲述错误通常意味着什么。在对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
});