【问题标题】:Sort List<NumberDetails> lstNumberDetails according to string[] searches根据 string[] 搜索排序 List<NumberDetails> lstNumberDetails
【发布时间】:2019-11-06 21:27:43
【问题描述】:

我正在使用像

这样的数字在数据库中搜索数据
7892811111 8049311111 725931111

但是当我在屏幕上得到结果时,它是在下图中数字列中显示的随机顺序,它将以随机顺序显示结果

但我想按照数字搜索的顺序在屏幕上显示结果,就像我在数字下方搜索时一样

7892811111 8049311111 725931111 

那么当我在数字列中得到结果时,第一条记录必须是 7892811111,然后是 8049311111,最后一条记录必须是 725931111。

当我搜索一个数字时,它将存储在一个数组中

当我得到结果时,我将记录添加到列表中

List<NumberDetails> lstNumberDetails = new List<NumberDetails>();
NumberDetails numDetails = new NumberDetails();
numDetails.Full_Name = dr["Full_Name"].ToString();
numDetails.Number = Convert.ToInt64(dr["Number"].ToString());
numDetails.Address = dr["Address"].ToString();
numDetails.Date = DateofRun.ToString();
numDetails.Circle = dr["Circle"].ToString();
numDetails.Operator = dr["Operator"].ToString();
lstNumberDetails.Add(numDetails);

我将lstNumberDetails 分配为ItemSorceDataGrid。 那么是否可以将lstNumberDetails中的数字与数组进行比较,因为数组包含搜索数字的顺序。

请帮我解决这个问题。

【问题讨论】:

  • searches变量只包含三个记录或n记录
  • n 条记录,比如我搜索了多少个数字,它包含那么多记录
  • 为什么不单独搜索每个数字并相应地填充网格。或者如果您一次搜索所有数据,搜索后重新排序数据有什么问题?

标签: c# wpf linq


【解决方案1】:

我没有足够的声誉,所以在答案中发布。

您可以遍历搜索数组并使用 LINQ FirstOrDefault() 来查找匹配模型并将其添加到您的网格数据源中。

你可以这样做

    public void Search(string[] searches)
    {
        List<NumberDetails> lstNumberDetails = new List<NumberDetails>();
        lstNumberDetails = GetNumbersFromDatabase();

        List<NumberDetails> gridItemSource = new List<NumberDetails>();

        foreach (var item in searches)
        {
            var modelLst = lstNumberDetails.Where(x => x.Number == item);
            if (modelLst.Any())
                gridItemSource.AddRange(modelLst);
        }

        gridName.ItemSource = gridItemSource;
    }

【讨论】:

  • foreach循环之前有没有代码要写?
  • 它有效,但如果假设我有两条相同数量的记录,那么我认为因为 FirstOrDefault 而只需要一条记录,但我想要所有值然后我使用的值而不是 FirstOrDefault
  • @ChetanRanpariya,是的,我已经编辑了代码。请检查
  • @user10753256 我已根据您的要求编辑了代码
【解决方案2】:

如果可以,请将您的string[] 更改为List&lt;string&gt;,以便您可以使用IndexOf 方法。

然后您可以根据它对其他列表进行排序:

lstNumberDetails = lstNumberDetails.OrderBy(i => searches.IndexOf(i.Number)).ToList();

【讨论】:

  • 或者按原样使用searches数组:OrderBy(i =&gt; Array.IndexOf(searches, i.Number))
  • 复杂度为N*N*log(N),其中N的长度为searches
  • @Theodor 它不会按原样排序并返回输出
猜你喜欢
  • 1970-01-01
  • 2010-10-17
  • 2020-11-18
  • 2016-06-26
  • 2021-03-26
  • 1970-01-01
  • 2019-07-02
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多