强制 string.format 为查询设置空值
Force string.format to set null value for a query
我有这个:
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 中的空值被替换为空格,我希望该行替换为 groupId 变量直接设置为空。我可以使用 C# 来完成这项工作吗?
您可以使用该行本身作为最后一个参数:
将AND ({5} IS null OR {5}=SbuGroupRID)
替换为{5}
并将最后一个参数的值设置为groupId.HasValue ? string.Format("AND ({0} IS null OR {0}=SbuGroupRID)", groupId) : string.Empty
您也可以将其移动到查询字符串之前的另一个变量中,并将该变量用作最后一个参数。
您可以使用 String.Format Method (String, Object[]) and ?? 作为可为 null 的值。
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" });
我有这个:
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 中的空值被替换为空格,我希望该行替换为 groupId 变量直接设置为空。我可以使用 C# 来完成这项工作吗?
您可以使用该行本身作为最后一个参数:
将AND ({5} IS null OR {5}=SbuGroupRID)
替换为{5}
并将最后一个参数的值设置为groupId.HasValue ? string.Format("AND ({0} IS null OR {0}=SbuGroupRID)", groupId) : string.Empty
您也可以将其移动到查询字符串之前的另一个变量中,并将该变量用作最后一个参数。
您可以使用 String.Format Method (String, Object[]) and ?? 作为可为 null 的值。
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" });