如何从PriceList中筛选指定NAME的所有价格并按TIMESTAMP排序?
解决方法:筛选指定NAME的价格并按时间排序
嘿,我懂你的需求——你现在不需要对所有NAME进行分组,而是要精准获取某个指定NAME的全部价格记录,再按TIMESTAMP排序对吧?
原来代码的问题
你当前的代码用了group by p.NAME,这会把整个PriceList里的所有不同NAME都分成独立的组,然后每个组内按时间排序,所以返回的是所有分组的集合。而你要的是单个(或指定几个)NAME的结果,完全不需要分组操作,直接过滤+排序就够了。
针对单个指定NAME的实现
假设你有一个变量存储目标NAME,比如targetName,直接用Where筛选后再排序:
// 替换成你实际要筛选的NAME值 string targetName = "ProductA"; // 获取指定NAME的所有价格,按TIMESTAMP升序排序 var targetPricesSorted = PriceList .Where(p => p.NAME == targetName) .OrderBy(a => a.TIMESTAMP);
如果需要降序排序,把OrderBy换成OrderByDescending即可:
var targetPricesSorted = PriceList .Where(p => p.NAME == targetName) .OrderByDescending(a => a.TIMESTAMP);
扩展:筛选多个指定NAME
如果需要同时获取多个NAME的价格数据,用Contains来匹配:
// 定义要筛选的多个NAME列表 List<string> targetNames = new List<string> { "ProductA", "ProductB", "ProductC" }; var targetPricesSorted = PriceList .Where(p => targetNames.Contains(p.NAME)) .OrderBy(a => a.TIMESTAMP);
这样返回的就是所有匹配指定NAME的价格记录,并且已经按时间戳排好序了,比原来的分组写法更直接高效。
内容的提问来源于stack exchange,提问作者user9198450
相关产品推荐
相关产品推荐

