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