创建重复的子数组并随机化顺序c#

创建重复的子数组并随机化顺序c#,c#,C#,我正在从数据库返回项目列表。该列表包含id、名字、姓氏、销售额、收入等信息 1 John James 431 213000 2 Scott Smith 301 43000 3 Jane Doe 431 300000 4 Tess Jones 431 14280 我的结果将包含如上所示的4行。我根据#销售价值按降序排列我的行。如果#sales value相同,则我按id订购。因此,订购后,我的结果将如下所示: 3 Jane Doe 431 300000 1 John James 431 2130

我正在从数据库返回项目列表。该列表包含id、名字、姓氏、销售额、收入等信息

1 John James 431 213000
2 Scott Smith 301 43000
3 Jane Doe 431 300000
4 Tess Jones 431 14280
我的结果将包含如上所示的4行。我根据#销售价值按降序排列我的行。如果#sales value相同,则我按id订购。因此,订购后,我的结果将如下所示:

3 Jane Doe 431 300000
1 John James 431 213000
4 Tess Jones 431 14280
2 Scott Smith 301 43000
现在,我想将销售相同的行的顺序随机化。我确信这意味着我可能不会使用order by id

我如何才能在销售相同的情况下创建结果的子数组,然后随机化它们的订单并将其插入原始数组?我这样做的主要原因是为我将要显示的数据添加一些变化,使其不同,并给用户以不同顺序显示的机会

以下是我获取原始数据的方式:

results = results.OrderByDescending(x => Math.Max((uint)x.TotalSales, x.TotalRevenue))
                            .GroupBy(x => x.Id)
                            .Select(x => x.First()).ToList();
我相信我将应用随机部分如下:

var randomIndx= new Random(TotalSales).Next(100) % (#: will this be the number of duplicates?);
所以


我不知道如何把事情组合起来。非常感谢任何有用的提示。

使用
Random
对您的收藏进行排序,这将使结果混乱。使用
ThenBy
将确保条目仅在其上一级排序中被洗牌(条目将在其相同的“NumOfSales”中被洗牌)

例如,对于类:

public class Employee
{
    public int Id{get;set;}
    public string Name{get;set;}
    public int NumOfSales{get;set;}
    public int Revenue{get;set;}
}
您的代码可能如下所示:

var originalEmployeeList = new List<Employee>()
{
    new Employee { Id = 1, Name = "John James", NumOfSales = 431, Revenue = 213000 },
    new Employee { Id = 2, Name = "Scott Smith", NumOfSales = 301, Revenue = 43000 },
    new Employee { Id = 3, Name = "Jane Doe", NumOfSales = 431, Revenue = 300000 },
    new Employee { Id = 4, Name = "Tess Jones", NumOfSales = 431, Revenue = 14280 },
};

var random = new Random();
var randomizedResults = originalEmployeeList
    .OrderByDescending(x => x.NumOfSales)
    .ThenBy(x => random.Next())
    .ToList();
var originalEmployeeList=新列表()
{
新员工{Id=1,Name=“John James”,NumOfSales=431,Revenue=213000},
新员工{Id=2,Name=“Scott Smith”,NumOfSales=301,Revenue=43000},
新员工{Id=3,Name=“Jane Doe”,NumOfSales=431,Revenue=300000},
新员工{Id=4,Name=“Tess Jones”,NumOfSales=431,Revenue=14280},
};
var random=新的random();
var randomizedResults=原始员工列表
.OrderByDescending(x=>x.NumOfSales)
.ThenBy(x=>random.Next())
.ToList();
这里的键是使用
random.Next()
ThenBy中。在本例中,NUMOFSALLES=431的人员将始终出现在NUMOFSALLES=301的人员之前,但同一NUMOFSALLES中的人员列表将随机化


这里有一个可运行的示例:

非常感谢您的解释。这很有效,我学到了一些新东西。结果比我预想的要简单得多。谢谢。为什么人们不解释为什么就投了反对票?