【发布时间】:2026-01-19 03:05:01
【问题描述】:
我有一个这样的列表,名为 result
{ Id = "8131367", GId = 27720, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 500.00 }
{ Id = "8131368", GId = 27720, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 1500.00 }
{ Id = "8131369", GId = 27720, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 500.00 }
{ Id = "8131370", GId = 27720, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 500.00 }
{ Id = "8131371", GId = 27720, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 500.00 }
{ Id = "8131372", GId = 27720, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 500.00 }
{ Id = "8131373", GId = 27721, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 500.00 }
{ Id = "8131374", GId = 27721, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 500.00 }
{ Id = "8131375", GId = 27721, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 500.00 }
{ Id = "8131376", GId = 27721, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 500.00 }
{ Id = "8131377", GId = 27721, Share = 1.0000, Type = "1029", OPC = "997", IPC = "997", Price = 1500.00 }
我需要根据具有相同值的 GId、Share、Type、OPC、IPC 和具有不同值的价格来过滤列表。所以从列表中第二个和最后一个价格不同所以我需要从列表项中获取价格不同且其余值相同的列表或 Id 属性。
通过使用两个 Foreach 循环,我能够得到我需要的东西,但不幸的是,我被要求将其转换为 LINQ 查询。这是我尝试过的
var items = result.Select(r => result.Where(rr => (r.GId == rr.GId)
&& (r.Share == rr.Share)
&& (r.Type == rr.Type)
&& (r.IPC == rr.IPC)
&& (r.OPC == rr.OPC)
&& (r.Price != rr.Price))).ToList();
但是从上面的查询中我没有得到我想要的,我相信我已经接近我需要的,但我缺乏 LINQ 方面的专业知识。
【问题讨论】:
-
你能用循环发布你以前的代码吗?
-
@Arcord 我现在没有。它的嵌套 foreach 循环如 foreach(var item1 in result) { foreach(var item2 in result) { if(item1.GId == item2.GId && ... item1.Price != item2.Prices) { // 设置 item1. Id 到列表中 } } }
-
如果您有想要转换为链接查询的代码,那么那就是可能是您应该显示的代码。或者描述你发布的代码如何没有提供预期的结果。
-
GroupBy通常是获取与某些常见属性相关的项目的好方法。 -
问题是你想要完成什么并不完全清楚。您是否正在与一组输入值进行比较?还是您想说“所有具有相同 X、Y 和 Z 的行,只返回与同一组中其他价格不同的行”。