私は、これはあなたが望むものをやっているとは思いません。
「companyCode」を検索し、存在する場合は2つの他のフィールドを追加すると、最初に表示されます。
最初のifがtrueの場合、他の2つのifsが真となります。最初のifの中に他のフィールドを追加します。
最初に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));
}
これはあなたの文字列は '" companyCodeであれば、あなたがやりたいことするつもりはないが| COSTCENTER | acc_code "' –
あなたが探しているキーワードは、互いに排他的ですか?現在、複数のマッチが行われた場合は、あなたのsortexpressionに重複したフィールドがある可能性があります。 – StuartLC
@StuartLC sortExpressionはグリッドビューから来ているので、重複しないと思います。 – Pop