【问题标题】:Disable Default Sorting in linq c#在linq c#中禁用默认排序
【发布时间】: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 查询和手动处理,因此完全不清楚您在说什么。

标签: c# asp.net linq


【解决方案1】:

如果您在从数据库中检索数据后未对数据进行排序并且您看到数据已排序,那么这可能是因为对数据库执行了 SQL-query。任何不同的SQL-query 都可能导致不同的排序。这是因为JOINing 到其他表或GROUPing 的结果,而使用INDEXES

通常,您无法确定在SQL-query 中不使用ORDER BY,结果未排序;可能是。

附言在您的情况下,要深入探讨的主题也是natural sorting。这会将A1, A2, A10 排序为A1, A10, A2

【讨论】:

  • 使用linq后,sql结果按A1,A2,...A10的顺序变化
猜你喜欢
  • 2023-03-16
  • 2022-08-24
  • 2019-06-02
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
相关资源
最近更新 更多