我不認爲這是做你想要什麼。
首先,如果您搜索「companyCode」並添加2個其他字段(如果存在)。
所以當第一個如果是真的,比其他2個ifs將是真實的,因爲您將在其中添加其他字段。
如果最初sortExpression只有單個字段,則可以將其更改爲「切換」。
switch (sortExpression)
{
case "companyCode":
sortExpression += ", costCenter, acc_code";
break;
case "costCenter":
sortExpression += ", companyCode, acc_code";
break;
case "acc_code":
sortExpression += ", companyCode, costCenter";
break;
default:
//default, everything else.
break;
}
如果沒有,你可以使用這樣的事情:
public string GetSortExpression(string sortExpression)
{
List<string> requiredFields = new List<string>(new[] { "companyCode", "costCenter", "acc_code" });
if (string.IsNullOrEmpty(sortExpression) // string is null or empty
|| !requiredFields.Any(x => sortExpression.IndexOf(x, StringComparison.OrdinalIgnoreCase) >= 0)) // string does not contain any of fields
{
sortExpression = "default, everything else";
}
else
{
List<string> fields =
sortExpression.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToList();
fields.AddRange(requiredFields.Except(fields));
sortExpression = string.Join(", ", fields);
}
return sortExpression;
}
測試:
[TestCase(null, "default, everything else")]
[TestCase("", "default, everything else")]
[TestCase("companyCode", "companyCode, costCenter, acc_code")]
[TestCase("costCenter", "costCenter, companyCode, acc_code")]
[TestCase("acc_code", "acc_code, companyCode, costCenter")]
[TestCase("acc_code, companyCode", "acc_code, companyCode, costCenter")]
[TestCase("acc_code, costCenter", "acc_code, costCenter, companyCode")]
public void GetSortExpressionTest(string initial, string exprectedResult)
{
Assert.AreEqual(exprectedResult, GetSortExpression(initial));
}
這是不會做你想做的,如果你的字符串是什麼'「企業編碼| costCenter | acc_code「'。 –
您正在尋找的關鍵字是否互斥?目前,如果有多個匹配項,您可能會在排序表達式中出現重複的字段。 – StuartLC
@StuartLC sortExpression來自網格視圖,所以我不認爲它會重複。 – Pop