【问题标题】:Force string.format to set null value for a query强制 string.format 为查询设置空值
【发布时间】:2017-06-01 02:37:11
【问题描述】:

我有这个:

int id = 10;
long partnerId = 20;
long? groupId = null;
DateTime startDate = Datetime.Now.AddDays(-5);
DateTime endDate = Datetime.Now;
bool isTesting = true;
bool isActive = false;

query = @"SELECT Vita as VitalLevel,count(distinct ccrid) as Answers, Vitald as VitalType
                      FROM CORE.vRecipientsc rd
                      INNER JOIN Recipiendy rs ON rs.CRRID = rd.RID
                      INNER JOIN RecipientStungs rsvr ON rsvr.StudyId = rs.Id 
                      WHERE SBURID = {0} 
                      AND ({5} IS null OR {5}=SbuGroupRID)
                      AND rs.DTUTC_Created >= '{1}' 
                      AND rs.DTUTC_Created <= '{2}'
                      AND rsvr.VitalTypeId = 8 
                      AND rsvr.VitalValue <> '' 
                      AND (rd.isTesting = {3} or rd.isTesting = 0)
                      AND rd.IsActive= {4}
                      GROUP BY rsvr.VitalValue, rsvr.VitalLevel, rsvr.VitalTypeId";

String.Format(query, new object[] {
            partnerId, startDate, endDate, Convert.ToInt32(isTesting), Convert.ToInt32(isActive), groupId
        });

然后我与数据库建立了连接并执行了多个查询,但是当我执行查询时,string.format 中的 null 值被替换为空格,我希望为 groupId 变量替换的行直接设置为 null。我可以用 C# 来完成这项工作吗?

【问题讨论】:

  • 以及更好的使用参数设置null

标签: c# string null string.format


【解决方案1】:

您可以将String.Format Method (String, Object[])?? 用于可空值。

String.Format(query, partnerId, startDate, endDate, Convert.ToInt32(isTesting), Convert.ToInt32(isActive), groupId ?? "null");

或者你可以使用相同的方法和三元运算符

String.Format(query, new object[] { partnerId, startDate, endDate, Convert.ToInt32(isTesting), Convert.ToInt32(isActive), groupId != null ? groupId.ToString() : "null" });

【讨论】:

    【解决方案2】:

    您可以使用该行本身作为最后一个参数:

    AND ({5} IS null OR {5}=SbuGroupRID)替换为{5}并将最后一个参数的值设置为groupId.HasValue ? string.Format("AND ({0} IS null OR {0}=SbuGroupRID)", groupId) : string.Empty

    您也可以在查询字符串之前将其移至另一个变量中,并将该变量用作最后一个参数。

    【讨论】:

      猜你喜欢
      • 2022-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      相关资源
      最近更新 更多