Entity Framework Include OrderBy random generates duplicate data

后端 未结 6 631
[愿得一人]
[愿得一人] 2020-11-30 02:29

When I retrieve a list of items from a database including some children (via .Include), and order the randomly, EF gives me an unexpected result.. I creates/clones addition

6条回答
  •  孤街浪徒
    2020-11-30 02:29

    I also ran into this problem, and solved it by adding a Randomizer Guid property to the main class I was fetching. I then set the column's default value to NEWID() like this (using EF Core 2)

    builder.Entity()
        .Property(m => m.Randomizer)
        .HasDefaultValueSql("NEWID()");
    

    When fetching, it gets a bit more complicated. I created two random integers to function as my order-by indexes, then ran the query like this

    var rand = new Random();
    var randomIndex1 = rand.Next(0, 31);
    var randomIndex2 = rand.Next(0, 31);
    var taskSet = await DbContext.MainClasses
        .Include(m => m.SubClass1)
            .ThenInclude(s => s.SubClass2)
        .OrderBy(m => m.Randomizer.ToString().Replace("-", "")[randomIndex1])
            .ThenBy(m => m.Randomizer.ToString().Replace("-", "")[randomIndex2])
        .FirstOrDefaultAsync();
    

    This seems to be working well enough, and should provide enough entropy for even a large dataset to be fairly randomized.

提交回复
热议问题