Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL,Linq C#错误';无法确定参数$1';的数据类型;_C#_Linq_Postgresql - Fatal编程技术网

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

PostgreSQL,Linq C#错误';无法确定参数$1';的数据类型;,c#,linq,postgresql,C#,Linq,Postgresql,我收到此错误“无法确定参数$1的数据类型” 我得到错误的where子句如下所示: var result = from Table in model.Table where (filter.XId.HasValue ? Table.XId == filter.XId: true) select new TableEntity

我收到此错误
“无法确定参数$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)
如果要根据filter的值生成不同的查询,可以执行以下操作:

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
});
var query=(IQueryable)model.Table;
如果(filter.XId!=null){
query=query.Where(row=>row.XId==filter.XId);
}
var result=query.Select(行=>newtableEntity{
Id=row.XId
});

将该条件替换为“filter.X==Table.X | | filter.X==null”@Evk我只想在其中添加这个条件,如果到达方法的过滤器有一个值,我将过滤表值,如果我写Table.X==filter.X,如果filter.X为null,我将得到错误的值……这不是它的工作方式。实际上,您当前的语句将被转换为非常难看且很长的SQL条件(您可以自己检查)。我建议的语句将获得完全相同的结果(如果filter为null,它将被忽略),但使用不太难看的语句,并且(可能,没有检查)它在PostgreSQL中也可以正常工作。如果筛选器为null,则根本不想包含条件-在Where语句之前检查它是否为null,而不是在它内部。@Evk如果我喜欢“filter.X==Table.X | | filter.X==null”,如果我的筛选器没有值,我是否会得到X==null的表值否,此条件与您的条件完全相同-如果filter.X为null-忽略条件(语句中的“:true”部分)。顺便问一下,这对postgre没有错误有帮助吗?