小编Cod*_*r23的帖子

我应该在LINQ中使用OrderByDescending两次吗?

我有这样的产品表: -

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可以不同,请检查更新的表格.

c# linq performance

6
推荐指数
1
解决办法
143
查看次数

按特定顺序排序数组

我有这个整数数组: -

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)

需要帮忙.

c# arrays

1
推荐指数
1
解决办法
122
查看次数

Enumerable.Except的两个重载之间的区别?

我试图理解Enumerable.Except方法的两个重载之间的区别,即

  • 除外(IEnumerable,IEnumerable)
  • 除外(IEnumerable,IEnumerable,IEqualityComparer)

显然,第一个不同之处在于第一个重载使用默认的相等比较器,而另一个使用IEqualityComparer,但我可以通过实现IEquatable接口(如MSDN文档中提到的Except方法)实现与第一个方法相同的结果,然后为什么需要第二次过载?

c# linq iequalitycomparer except

1
推荐指数
1
解决办法
153
查看次数

标签 统计

c# ×3

linq ×2

arrays ×1

except ×1

iequalitycomparer ×1

performance ×1