c# - 根据条件在列表中保留不同的值
问题描述
我有一个列表,我在 linQ 中应用以下条件:
我想选择名称包含某个字符串的所有项目。
var nameFilter = result
.Where(e => e.Name.Contains(requestedValue))
.ToList();
最后,有时会发生我有一个重复名称的列表:
例如:
requestedValue = 'form';
我最终得到:
Name Price
transformer 100
transformer 20
formation 340
former 201
我得到了transformer
两次。在这种情况下,我只想以最低的价格离开变压器:20
我怎么能在没有循环的情况下用 linQ 做到这一点?
解决方案
你可以利用GroupBy
方法
var nameFilter = result.Where(e => e.Name.Contains(requestedValue))
.GroupBy(k=>k.Name, g=>g.Price, (k,g)=>new Model {Name = k, Price = g.Min()})
.ToList();
wherenew Model
应该更改为您的班级名称。
如果您有更多属性要返回,可能会更方便
var nameFilter = result.Where(e => e.Name.Contains(requestedValue))
.GroupBy(k => k.Name, g => g, (k, g) =>
{
var minPrice = g.Min(x => x.Price);
return g.First(x => x.Price == minPrice);
}).ToList();
可以通过单个 for 循环来查找minPrice
和查找项目,或者,例如,通过使用以下讨论hereminPrice
推荐阅读
- python - 如何序列化/反序列化来自 google documentai API 的 protobuf 响应?
- facebook - FB Ad Account API - 相同的请求参数,但不同环境下的结果不同
- linux - 如何在引导徽标上隐藏 linux 引导日志?
- delphi - 使用 THTTPRIO 进行 SOAP 调用时如何强制使用 TLS 1.2?
- android - Android - 在完成第一个活动之前打开另一个活动时未调用 onActivityResult
- python - 如何将 message.text 转换为字符串并将其保存到数据库。如何通过电报机器人下载照片。TelegramBotAPI
- flutter - Flutter:如何调用存储在变量中的类
- autodesk-forge - How to receive the RealityCapture results on an email address
- javascript - 当值 <0 时需要红色的进度条
- svg - 使用 imagemagick 从带有覆盖文本的 SVG 创建 PNG 图标