如果参数可能为空,则从 sql select 获取值
Get value from sql select if parameter may be null
正在使用 EF Core 从 ASP.NET MVC Core 应用程序中的任意 sql 查询中寻找获取第一列第一行值的方法。
喜欢
var total = ctx.ExecuteScalar<decimal?>(@"select ... where p1={0}", null);
尝试 https://github.com/weitzhandler code from https://github.com/dotnet/EntityFramework.Docs/issues/969 使用 Npgsql EF 提供程序(更改为同步):
public partial class EevaContext : DbContext
{
public T ExecuteScalar<T>(string rawSql, params object[] parameters)
{
var context = this;
var conn = context.Database.GetDbConnection();
using var command = conn.CreateCommand();
command.CommandText = rawSql;
if (parameters != null)
foreach (var p in parameters)
command.Parameters.Add(p ?? DbNull.Value);
conn.Open();
return (T)command.ExecuteScalar();
}
如果参数值为空行
command.Parameters.Add(p ?? DbNull.Value);
抛出错误
InvalidCastException: The value "" is not of type "NpgsqlParameter"
and cannot be used in this parameter collection.
Npgsql.NpgsqlParameterCollection.Cast(object value)
运行 此类查询的最佳方式是什么?
也许 EF 核心有一些内置方法?还是使用某种类型并将其注入 EF Context 是 OnModelCreated 方法更好?
如果没有更好的方法如何修复此代码以便也接受具有空值的参数?
在应用程序中有很多这样的查询,其中包含很多参数,并且在大量工作中重新编写所有这些参数。 WebMatrix QueryValue 在 .NET 4 中使用,它允许在参数中使用空值。
command.Parameters.Add(p ?? DbNull.Value);
p
是 NpgsqlParameter,还是您想发送的某个值??您不能简单地将值(或空值)添加到 command.Parameters.Add
- 您需要使用 NpgsqlParameter 包装这些值或改用 command.Parameters.AddWithValue()
。请注意,NpgsqlParameter 还需要正确设置其 ParameterName
,对应于原始 SQL 中的占位符(例如 @param1
)。
正在使用 EF Core 从 ASP.NET MVC Core 应用程序中的任意 sql 查询中寻找获取第一列第一行值的方法。
喜欢
var total = ctx.ExecuteScalar<decimal?>(@"select ... where p1={0}", null);
尝试 https://github.com/weitzhandler code from https://github.com/dotnet/EntityFramework.Docs/issues/969 使用 Npgsql EF 提供程序(更改为同步):
public partial class EevaContext : DbContext
{
public T ExecuteScalar<T>(string rawSql, params object[] parameters)
{
var context = this;
var conn = context.Database.GetDbConnection();
using var command = conn.CreateCommand();
command.CommandText = rawSql;
if (parameters != null)
foreach (var p in parameters)
command.Parameters.Add(p ?? DbNull.Value);
conn.Open();
return (T)command.ExecuteScalar();
}
如果参数值为空行
command.Parameters.Add(p ?? DbNull.Value);
抛出错误
InvalidCastException: The value "" is not of type "NpgsqlParameter" and cannot be used in this parameter collection. Npgsql.NpgsqlParameterCollection.Cast(object value)
运行 此类查询的最佳方式是什么? 也许 EF 核心有一些内置方法?还是使用某种类型并将其注入 EF Context 是 OnModelCreated 方法更好?
如果没有更好的方法如何修复此代码以便也接受具有空值的参数?
在应用程序中有很多这样的查询,其中包含很多参数,并且在大量工作中重新编写所有这些参数。 WebMatrix QueryValue 在 .NET 4 中使用,它允许在参数中使用空值。
command.Parameters.Add(p ?? DbNull.Value);
p
是 NpgsqlParameter,还是您想发送的某个值??您不能简单地将值(或空值)添加到 command.Parameters.Add
- 您需要使用 NpgsqlParameter 包装这些值或改用 command.Parameters.AddWithValue()
。请注意,NpgsqlParameter 还需要正确设置其 ParameterName
,对应于原始 SQL 中的占位符(例如 @param1
)。