根据字符串对List <NumberDetails> lstNumberDetails进行排序[]搜索

时间:2019-06-25 05:23:06

标签: c# wpf linq

我正在使用

之类的数字在数据库中搜索数据。
7892811111 8049311111 725931111

但是当我在屏幕上获取结果时,它以随机顺序显示在数字栏中的下图,如下图所示,它将以随机顺序显示结果

enter image description here

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

7892811111 8049311111 725931111 

然后,当我在number列中得到结果时,第一个记录必须是7892811111,然后是8049311111,最后一个必须是725931111。

当我搜索数字时,它将存储在数组中 enter image description here

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

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分配为ItemSorce的{​​{1}}。 因此可以将DataGrid中的Number与array进行比较,因为array包含搜索数字的顺序。

请帮助我解决此问题。

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:1)

如果可以,请将string[]更改为List<string>,以便可以使用IndexOf方法。

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

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