我有这样的产品表: -
ProductID ProductName Price
1 Milk 10
2 Banana 20
3 Apple 15
1 Grapes 12
2 Banana 25
1 Milk 8
Run Code Online (Sandbox Code Playgroud)
我想找到每个productId最高价的产品.
样本输出: -
ProductID ProductName Price
1 Grapes 12
2 Banana 25
3 Apple 15
Run Code Online (Sandbox Code Playgroud)
我试过这个查询: -
List<Product> groups = products
.GroupBy(p => p.ProductId)
.Select(p => new Product
{
ProductId = p.Key,
Name = p.OrderByDescending(o => o.Price).First().Name,
Price = p.OrderByDescending(o => o.Price).First().Price,
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
这个查询工作正常,但我的问题是我应该使用OrderByDescending两次?我的意思是因为我只想要基于1个属性的单项并假设有多个其他属性,所以我需要一次又一次地使用相同的逻辑吗?
编辑: 原谅我忘了提,请假设ProductName可以不同,请检查更新的表格.
我有这个整数数组: -
int[] numbers = new int[] { 10, 20, 30, 40 };
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个数组,它将包含第一个元素,最后一个元素,第二个元素,倒数第二个元素等等.
所以,我的结果将是: -
int[] result = {10,40,20,30};
Run Code Online (Sandbox Code Playgroud)
这是我的方法,在一个循环从第一个开始直到中间和第二个循环从最后开始并到达中间并相应地选择项目,但我完全搞砸了.这是我尝试过的代码: -
private static IEnumerable<int> OrderedArray(int[] numbers)
{
bool takeFirst = true;
if (takeFirst)
{
takeFirst = false;
for (int i = 0; i < numbers.Length / 2; i++)
{
yield return numbers[i];
}
}
else
{
takeFirst = true;
for (int j = numbers.Length; j < numbers.Length / 2; j--)
{
yield return numbers[j];
}
}
}
Run Code Online (Sandbox Code Playgroud)
需要帮忙.
我试图理解Enumerable.Except方法的两个重载之间的区别,即
显然,第一个不同之处在于第一个重载使用默认的相等比较器,而另一个使用IEqualityComparer,但我可以通过实现IEquatable接口(如MSDN文档中提到的Except方法)实现与第一个方法相同的结果,然后为什么需要第二次过载?