C# 使用Linq查询根据C中的名称对列表进行排序

C# 使用Linq查询根据C中的名称对列表进行排序,c#,linq,sorting,C#,Linq,Sorting,在这里,当用户保存客户信息时,我会得到一个新客户。我有一个名为allcustomers的列表,我在其中存储customer对象。因此,我在汇总列表中生成一个客户列表,其中包含所有客户信息。但我希望能够使用linq查询在列表框中按字母顺序对名称进行排序。这是我的代码,它不会对名字排序。有什么建议吗 List<Customer> allCustomers = new List<Customers>(); private void saveCustomerBtn_Click_

在这里,当用户保存客户信息时,我会得到一个新客户。我有一个名为allcustomers的列表,我在其中存储customer对象。因此,我在汇总列表中生成一个客户列表,其中包含所有客户信息。但我希望能够使用linq查询在列表框中按字母顺序对名称进行排序。这是我的代码,它不会对名字排序。有什么建议吗

List<Customer> allCustomers = new List<Customers>();

private void saveCustomerBtn_Click_1(object sender, EventArgs e)
{
    if (lNameTextBox.Text.Length > 0 && addressTextBox.Text.Length > 0)
    {                
        Customer aCustomer = new Customer(lNameTextBox.Text, addressTextBox.Text, Convert.ToDouble(idTextBox.Text), aReservation);
        conCustLabel.Text = "Customer Information has been saved!";

        allCustomers.Add(aCustomer);
    }
    else
    {
        MessageBox.Show("No data has been entered, Please enter the information!");
    }
}

private void sNameBtn_Click(object sender, EventArgs e)
{
    summaryListBox.Items.Clear();

    foreach (Customer aCustomer in allCustomers)
    {                
        var sortNames = from Customer in allCustomers
                        orderby Name ascending   
                        select Name;

        if (sortNames.Any())
        {
            summaryListBox.Items.Add(aCustomer.DisplayCustomers());
        }             
    }                    
}

我不确定我是否完全理解您的要求,但如果您只想按字母顺序添加所有客户,我认为您可以将sNameBtn_Click方法更改为:

private void sNameBtn_Click(object sender, EventArgs e)
{
    summaryListBox.Items.Clear();
    summaryListBox.Items.AddRange(allCustomers.OrderBy(x => x).Select(x => x.DisplayCustomers()));                 
}

首先对列表进行排序,然后循环到列表项

summaryListBox.Items.Clear(); allCustomers = (from Customer in allCustomers orderby Customer.Name ascending select Customer).ToList(); foreach (Customer aCustomer in allCustomers) {  summaryListBox.Items.Add(aCustomer.DisplayCustomers());  } 

不需要外部foreach和if。只需进行排序,然后将summaryListBox的数据源设置为sortNames.ToList;除非DisplayCustomers不简单地返回客户名称,否则您的代码似乎有问题-您在按名称排序时没有在任何地方定义名称?您应该在Customer中执行orderby操作,即Customer.Name?此外,您不应该将客户类型用作LINQ中的范围变量,因此从所有客户orderby aCust.Name选择aCust.Name显然客户包含多个字段,因此您需要选择。