c# - 将条件参数传递给 Database.SqlQuery

标签 c# sql linq entity-framework

我一直在执行以下操作以使用我的 sql 查询传递参数:

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

我遇到了这样一种情况,在我的 sql 字符串中并不总是使用 @CustomerId。这意味着我使用 if 语句来添加 (Where 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

关于c# - 将条件参数传递给 Database.SqlQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30848244/

相关文章:

c# - 在 C# 中显示从 1 到 100 的数字,使得每行以模数 10 结尾

c# - 在 Unity3d 中处理文件时使用 System.IO 是否安全?

c# - HttpContext GetLocalResourceObject 和 GetGlobalResourceObject 之间的区别

c# - asp.net c#代码中的错误(mysql数据库连接)

c# - LINQ 联盟与 SQL 联盟

asp.net-mvc - 我们是否应该直接在 asp net mvc View 中执行 LINQ

c# - 计算有多少项目出现在具有特定 ID 的项目之前

c# - 如何使用 Autofixture 中的 RandomRangedNumberCustomization 来确保参数在一定范围内?

sql - 使用 NOT IN 子句的 Hive 查询的替代方案

php - 在一个查询中更新(或插入)多行