OrderBy排序无效且Resharper提示‘纯方法返回值未使用’问题求助
解决Resharper“Return value of pure method is not used”警告及排序不生效问题
嘿,我来帮你搞定这个问题!你遇到的警告和排序没生效的原因其实是同一个——LINQ的OrderBy方法不会修改原集合,而是返回一个排好序的新集合,你现在只是调用了它但没把返回值存下来,所以原listDetail根本没变化~
为什么会出现这个警告?
Resharper提示的“Return value of pure method is not used”,意思是你调用了一个「纯方法」(没有副作用、只返回结果的方法),但却没使用它的返回值。OrderBy就是典型的纯方法,它不会改变输入的List,只会生成一个新的有序序列。
两种解决方案
方案1:接收OrderBy的返回值并重新赋值
把OrderBy的结果存回原变量(注意要转成List,因为OrderBy返回的是IOrderedEnumerable<T>类型):
var listDetail = (from p in Expense.GetAll() where p.Group == "001" select new ExpenseViewModel() { ExpenseC = p.ExpenseC, Group = p.Group, Cost = p.Cost, }).ToList(); // 接收排序后的新集合并赋值 listDetail = listDetail.OrderBy(p => p.ContainerSizeI).ToList();
方案2:在初始查询时直接添加排序(更高效)
如果可以的话,直接在生成listDetail的查询里加上排序,这样不需要额外的步骤,性能也更好:
var listDetail = (from p in Expense.GetAll() where p.Group == "001" select new ExpenseViewModel() { ExpenseC = p.ExpenseC, Group = p.Group, Cost = p.Cost, }) // 直接在查询链中添加排序 .OrderBy(p => p.ContainerSizeI) .ToList();
小提醒
大多数LINQ方法(比如Where、Select、OrderBy)都是无副作用的,它们不会修改原始集合,只会返回新的结果。以后使用这类方法时,一定要记得处理返回值哦!
内容的提问来源于stack exchange,提问作者Triet Pham
相关产品推荐
相关产品推荐

