PostgreSQL,Linq C#error'无法确定参数$ 1的数据类型

时间:2016-06-08 11:38:45

标签: c# linq postgresql

我收到此错误"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数据库来解决这个问题....

1 个答案:

答案 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
});