我正在使用由MIT开发并托管在http://code.google.com/p/linqtoexcel/wiki/UsingLinqToExcel的Google Code上的LinqToExcel项目,以从如下所示的excel表中解析我的数据集:
我正在尝试使用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())
技巧,但是得到了相同的结果。
答案 0 :(得分:0)
看起来OrderBy仅在指向精确列时才可以工作。我检查了库资源。如果您去:
https://github.com/paulyoder/LinqToExcel/blob/master/src/LinqToExcel/Query/SqlGeneratorQueryModelVisitor.cs(第113行)
您可以看到对OrderBy SQL的处理。它忽略任何方法调用,仅保存列名。这种方法行不通。作为解决方法,您可以在.ToList()
之前先进行.OrderBy()
。