【发布时间】:2016-02-27 09:21:37
【问题描述】:
我有一个包含值的列表 A1,A2,A3,A4...A10... 从数据库中获取的值按此顺序排列。但是当使用 linq 时,顺序会更改为 A1,A10,A2,A20,A3..... 即使不使用顺序默认排序是升序。有没有办法禁用这种默认排序?
public static string[] GetCompleteAutoCompleteItemsUsingDataTable(this DataTable AutoCompleteTable, string strPrefixText, int Count)
{
string AutoCompleteFieldName = AutoCompleteTable.Columns[1].Caption;
List<string> objlistMain = new List<string>();
if (!string.IsNullOrEmpty(strPrefixText))
{
strPrefixText = strPrefixText.ToLower().RemoveSpecialCharactersFromString();
objlistMain = (from dr in AutoCompleteTable.Select("[" + AutoCompleteFieldName + "] <> ''").AsEnumerable() where dr.Field<string>(AutoCompleteFieldName).ToLower().RemoveSpecialCharactersFromString().StartsWith(strPrefixText) select dr.Field<string>(AutoCompleteFieldName)).Take(Count).ToList<string>();
if (objlistMain.Count < Count && AutoCompleteTable.Rows.Count > objlistMain.Count)
{
List<string> objlist = (from dr in AutoCompleteTable.Select("[" + AutoCompleteFieldName + "] <> ''").AsEnumerable() where dr.Field<string>(AutoCompleteFieldName).ToLower().RemoveSpecialCharactersFromString().Contains(strPrefixText) && !objlistMain.Contains(dr.Field<string>(AutoCompleteFieldName)) select dr.Field<string>(AutoCompleteFieldName)).Take(Count - objlistMain.Count). ToList<string>();
foreach (string str in objlist)
{
objlistMain.Add(str);
}
}
}
else
{
objlistMain = (from dr in AutoCompleteTable.Select().AsEnumerable() select dr.Field<string>(AutoCompleteFieldName)).Take(Count).ToList<string>();
}
return objlistMain.Distinct().ToArray();
}
【问题讨论】:
-
你要什么顺序?
-
我不希望它被排序
-
也许你所说的升序是插入顺序?
-
不,它不在插入顺序中
-
没有像 “linq 中的默认排序” 这样的东西。改写问题并更新代码示例 - 您包含的示例包含几个 LINQ 查询和手动处理,因此完全不清楚您在说什么。