将条件参数传递给 Database.SqlQuery



我一直在做以下事情来用我的sql查询传递参数:

var retval = context.MyObject.SqlQuery(sql.ToString(),
                                                 new SqlParameter("@ProductId", productId),
                                                 new SqlParameter("@CustomerId", customerId)).ToList();

我遇到了一个场景,即@CustomerId并不总是在我的 sql 字符串中使用。这意味着我使用 if 语句来添加(其中 p.CustomerId = @CustomerId)或将其排除在外。

我意识到我现在无法将参数直接传递给 SqlQuery 函数。相反,我必须创建一个参数的对象列表,然后将其传入:

        SqlParameter param1 = new SqlParameter("@ProductId", productId);
        SqlParameter param2 = new SqlParameter("@CustomerId", customerId);
        object[] parameters = new object[] { param1, param2 };

如何做到这一点,以便我可以使用 if 语句将 CustomerId 参数添加到我的参数数组中?

您可以将查询编辑为此

SELECT * FROM Product p 
WHERE 
    p.ProductId = @ProductId 
    AND (@CustomerId IS NULL OR p.CustomerId = @CustomerId)

然后,如果不使用它,则将DBNull.Value传递给@CustomerId

您可以尝试改用 sql 命令,因为它允许使用参数集合。但这可能需要您稍微更改代码结构。

        int a = 1;
        SqlCommand sql = new SqlCommand();
        sql.CommandText = "SELECT * FROm somwhere";
        List<SqlParameter> lstParams = new List<SqlParameter>();
        if (a == 1)
        {`enter code here`
            SqlParameter sqlParam1 = new SqlParameter();
            lstParams.Add(sqlParam1);
        }
        else if (a == 2)
        {
            SqlParameter sqlParam2 = new SqlParameter();
            lstParams.Add(sqlParam2);
        }
        sql.Parameters.AddRange(lstParams.ToArray());
        sql.BeginExecuteReader();

相关内容

  • 没有找到相关文章

最新更新