C# 如何使用LINQ中的多个where子句获取自定义对象集合中特定属性参数的值?
我有以下清单:C# 如何使用LINQ中的多个where子句获取自定义对象集合中特定属性参数的值?,c#,linq,C#,Linq,我有以下清单: List<Product> productList = new List<Product> { new Product(){ Name = "C", OriginYear=1992,DevelopementYear=1992,IValue=110}, new Product(){ Name = "C", OriginYear=1992,DevelopementYear=1993,IValue=170}, ne
List<Product> productList = new List<Product>
{
new Product(){ Name = "C", OriginYear=1992,DevelopementYear=1992,IValue=110},
new Product(){ Name = "C", OriginYear=1992,DevelopementYear=1993,IValue=170},
new Product(){ Name = "C", OriginYear=1993,DevelopementYear=1993,IValue=200},
new Product(){ Name = "NC", OriginYear=1990,DevelopementYear=1990,IValue=45.2M},
new Product(){ Name = "NC", OriginYear=1990,DevelopementYear=1991,IValue=64.8M},
new Product(){ Name = "NC", OriginYear=1990,DevelopementYear=1993,IValue=37.0M},
new Product(){ Name = "NC", OriginYear=1991,DevelopementYear=1991,IValue=50},
new Product(){ Name = "NC", OriginYear=1991,DevelopementYear=1992,IValue=75},
new Product(){ Name = "NC", OriginYear=1991,DevelopementYear=1993,IValue=25},
new Product(){ Name = "NC", OriginYear=1992,DevelopementYear=1992,IValue=55},
new Product(){ Name = "NC", OriginYear=1992,DevelopementYear=1993,IValue=85},
new Product(){ Name = "NC", OriginYear=1993,DevelopementYear=1993,IValue=100}
};
它返回0。
但是,如果我检查:
new System.Linq.SystemCore_EnumerableDebugView<decimal>(temp).Items[0]
new System.Linq.SystemCore\u EnumerableDebugView(temp).Items[0]
它给出了期望的值
我可以知道发生了什么吗?我如何改进查询
提前感谢。选择返回一个
IEnumerable
,您可以使用foreach对其进行迭代
var temp = productList.Where(p => p.Name == "C" && p.OriginYear == 1992 && p.DevelopementYear == 1992).Select(p => p.IValue);
foreach(var t in temp)
{
Console.WriteLine(t);
}
或者,如果希望通过使用索引值访问单个元素,可以从中创建列表或数组对象
var temp = productList.Where(p => p.Name == "C" && p.OriginYear == 1992 && p.DevelopementYear == 1992).Select(p => p.IValue).ToArray();
Console.WriteLine(temp[0]);
您发布的查询将返回一个包含单个元素的序列,其中该元素为
110
。不清楚您所说的“its[sic]返回0”是什么意思,也不清楚您为什么认为应该得到一个值为170
的元素。如果您想要答案,请修复您的问题,使其包含一个可靠地再现问题的好的。是的,我的意思是110。返回0意味着我得到的temp=0的值。我基本上需要得到110的值。假设Product
类只存储IValue
的指定值,您上面发布的代码就会这样做。所以,复制并粘贴您实际使用的代码。如果你隐瞒了相关细节,没有人能帮你。
var temp = productList.Where(p => p.Name == "C" && p.OriginYear == 1992 && p.DevelopementYear == 1992).Select(p => p.IValue).ToArray();
Console.WriteLine(temp[0]);