如何创建返回IEnumerable的LINQ查询?现有实现异常求修正
修正LINQ查询:计算每个客户的订单数量
问题分析
你当前的查询错误在于使用了嵌套的from co in c.Orders,这会把每个客户的订单做扁平展开,导致同一个客户会被重复输出N次(N为该客户的订单数),虽然订单数量的计算是对的,但结果集不符合“每个客户仅返回一条记录”的需求。
正确实现方式
方式1:LINQ查询表达式
直接遍历每个客户,提取客户ID和其订单数组的长度即可,不需要展开订单:
public static IEnumerable<(string customerId, int orderCount)> CustomersOrdersCount() { List<Customer> customers = Customers.CustomerList; var query = from c in customers select (customerId: c.CustomerId, orderCount: c.Orders.Length); return query; }
方式2:LINQ方法链写法
如果偏好方法链风格,也可以这样写:
public static IEnumerable<(string customerId, int orderCount)> CustomersOrdersCount() { return Customers.CustomerList .Select(c => (customerId: c.CustomerId, orderCount: c.Orders.Length)); }
补充说明
因为Customer.Orders是数组类型,使用Length属性比Count()扩展方法更高效;如果是List<Order>类型,则用Count属性。两种写法都能准确返回每个客户的ID和对应的订单数量,且每个客户仅出现一次。
内容的提问来源于stack exchange,提问作者Dibldop
相关产品推荐
相关产品推荐

