我有一个包含数据库列名称的字符串列表,并且是随机顺序,包含随机数量的项目。此列表可能如下所示:
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是一个查询数据库的工作函数。这可能吗?
答案 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
必须包含所有可能的列名。