Entity Framework C# 输入客户号查询Order表匹配记录开发求助
核心修改说明
- 修正控制台提示文本,改为提示用户输入客户号
- 使用LINQ的
Where()方法对Order数据集按CustomerNo字段做过滤,仅匹配用户输入的客户号对应的记录 - 额外补充无匹配记录的提示、输入格式错误的异常处理,提升程序健壮性
修改后完整代码
using System; using System.Linq; using System.Data.Entity; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; class Program { static void Main(string[] args) { // 输入异常处理 try { using (var ctx = new Sales()) { // 修改提示文本为输入客户号 Console.WriteLine("请输入客户号: "); int customerNo = Convert.ToInt32(Console.ReadLine()); // 新增Where筛选条件,仅查询对应客户号的订单 var matchedOrders = ctx.Order.Where(o => o.CustomerNo == customerNo).ToList(); if (matchedOrders.Count == 0) { Console.WriteLine("该客户号无对应的订单记录"); return; } foreach (var m in matchedOrders) { // 输出增加分隔符更易读 Console.WriteLine($"订单号:{m.OrderNo} 下单日期:{m.Date:yyyy-MM-dd} 客户号:{m.CustomerNo}"); } } } catch (FormatException) { Console.WriteLine("输入的客户号格式错误,请输入数字"); } catch (Exception ex) { Console.WriteLine($"程序运行出错:{ex.Message}"); } } } public class Sales : DbContext { public Sales() : base("name=Sales") { } public IDbSet<Order> Order { get; set; } } [Table("Order")] public class Order { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int OrderNo { get; set; } public DateTime? Date { get; set; } public int CustomerNo { get; set; } }
关键逻辑说明
原代码直接遍历整个ctx.Order数据集,所以会输出全表订单。新增的Where(o => o.CustomerNo == customerNo)会在数据库层面生成带WHERE条件的SQL查询,仅返回对应客户号的订单记录,相比本地全量拉取后过滤性能更高。
内容的提问来源于stack exchange,提问作者DudeLostInCode
相关产品推荐
相关产品推荐

