使用LinqToExcel时无法随机订购

时间:2019-03-18 14:02:39

标签: c# list linq linq-to-excel

我正在使用由MIT开发并托管在http://code.google.com/p/linqtoexcel/wiki/UsingLinqToExcel的Google Code上的LinqToExcel项目,以从如下所示的excel表中解析我的数据集:

Part of the dataset

我正在尝试使用Linq OrderBy随机数技术从我的数据集中选择包含面积和长度的30个excel行:

public class Obj
{
    public double Area { get; set; }
    public double Length { get; set; }
}

namespace LinqToExcel.Screencast
{
    class Program
    {
        static void Main()
        {
            var excel = new ExcelQueryFactory();
            excel.FileName = @"C:\\radno\\jame.xls";

            Random rnd = new Random();

            var listExcel = from x in excel.Worksheet<Obj>()
                select x;

            var orderedList = listExcel.OrderBy(r => rnd.Next());

            foreach (var u in orderedList.Take(30))
            {
                Console.WriteLine($"the area is {u.Area} while length is {u.Length}");
            }
        }
    }
}

但是它不起作用,因为我总是得到相同的前30对。我在这里做错什么了吗?这应该可行吗,并且这是LinqToExcel错误吗?

我尝试了list.OrderBy(x => Guid.NewGuid())技巧,但是得到了相同的结果。

1 个答案:

答案 0 :(得分:0)

看起来OrderBy仅在指向精确列时才可以工作。我检查了库资源。如果您去: https://github.com/paulyoder/LinqToExcel/blob/master/src/LinqToExcel/Query/SqlGeneratorQueryModelVisitor.cs(第113行) 您可以看到对OrderBy SQL的处理。它忽略任何方法调用,仅保存列名。这种方法行不通。作为解决方法,您可以在.ToList()之前先进行.OrderBy()