自定义字符串顺序列表

时间:2017-11-02 12:45:09

标签: c# sorting

我有一个包含数据库列名称的字符串列表,并且是随机顺序,包含随机数量的项目。此列表可能如下所示:

Program.i

我还制作了另一个列表List<string> searchBy = new List<string>(new string[] { "LAN_Share", "[Group]", "AccessMask", "[Server]", "max([TimeStamp]) as [TimeStamp]" }); (如下所示),其中包含我希望fixedList列表所在的顺序。问题是我不想将缺少的元素添加到searchBy列表,只需订购它们。

searchBy

List<string> fixedList = new List<string>(new string[] { "[Server]", "LAN_Name", "LAN_Share", "[Group]", "[User]", "ID", "AccessMask", "max([TimeStamp]) as [TimeStamp]" }); 包含所有可能的字符串和正确的顺序。一旦我有正确的顺序,我将列表转换为数组:

fixedList

使用以下命令查询SQL数据库:

string query = string.Join(",", searchBy.ToArray());

其中SQL_Query是一个查询数据库的工作函数。这可能吗?

3 个答案:

答案 0 :(得分:4)

您只想在第二个列表中订购searchBy - 列表吗?然后这应该工作:

var orderColumns = searchBy.OrderBy(s =>
{
    int index = fixedList.IndexOf(s);
    return index == -1 ? int.MaxValue : index;
});

如果第二个列表始终包含所有列,则可以简化为searchBy.OrderBy(s => fixedList.IndexOf(s))

答案 1 :(得分:1)

您可以按固定列表中出现的索引对其进行排序:

searchBy = searchBy.OrderBy(s => fixedList.IndexOf(s)).ToList();

答案 2 :(得分:1)

您可以使用LINQ:

var sorted = fixedList.Where (x => searchBy.Contains (x)).ToList ();

fixed list(已经订购),您获得searchBy列表中存在的项目。

当然fixed list必须包含所有可能的列名。