C# 使用LinqToExcel时无法随机排序
我正在使用麻省理工学院开发的LinqToExcel项目,该项目托管在Google Code at上,从excel表格解析我的数据集,该表格如下所示: 我尝试使用Linq OrderBy随机数技术从包含面积和长度的数据集中随机选取30行excel行,如下所示:C# 使用LinqToExcel时无法随机排序,c#,list,linq,linq-to-excel,C#,List,Linq,Linq To Excel,我正在使用麻省理工学院开发的LinqToExcel项目,该项目托管在Google Code at上,从excel表格解析我的数据集,该表格如下所示: 我尝试使用Linq OrderBy随机数技术从包含面积和长度的数据集中随机选取30行excel行,如下所示: public class Obj { public double Area { get; set; } public double Length { get; set; } } namespace LinqToExcel.
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 bug吗
我尝试了list.OrderByx=>Guid.NewGuid技巧,但得到了相同的结果。看起来只有当您指向确切的列时,OrderBy才能工作。我查了图书馆的资料。如果您访问: 第113行
您可以看到SQL将什么带到OrderBy。它忽略任何方法调用,只保存列名。这种方法行不通。作为一种解决方法,您可以在.ToList之前使用.OrderBy。看起来只有当您指向确切的列时,OrderBy才能工作。我查了图书馆的资料。如果您访问: 第113行
您可以看到SQL将什么带到OrderBy。它忽略任何方法调用,只保存列名。这种方法行不通。作为一种解决方法,您可以执行.ToList before.OrderBy.这可能与您使用Linq to SQL时遇到的问题相同,在C语言中完全有效的请求无法转换为目标语言SQL/ExcelQueryFactory使用的任何语言。但我以前没有使用过ExcelQueryFactory,因此无法直接确认。这可能与您在Linq to SQL中遇到的问题相同,在Linq to SQL中,您的请求在C中完全有效,无法转换为目标语言SQL/ExcelQueryFactory使用的任何语言。但是我以前没有和ExcelQueryFactory合作过,所以我不能直接确认它。就是这样,它成功了!当我加上之前的.ToList.OrderBy时,它起作用了。想解释一下当你添加时引擎盖下发生了什么吗?在这种情况下是什么?谢谢。ToList,创建一个包含元素的普通列表对象。在制作之前,它是一个来自linqToExcel的IQueryable,它不支持orderby,就像您尝试的那样。你应该读一些关于IQueryable和IEnumerablet的文章。就是这样,它成功了!当我加上之前的.ToList.OrderBy时,它起作用了。想解释一下当你添加时引擎盖下发生了什么吗?在这种情况下是什么?谢谢。ToList,创建一个包含元素的普通列表对象。在制作之前,它是一个来自linqToExcel的IQueryable,它不支持orderby,就像您尝试的那样。你应该读一些关于IQueryable和IEnumerable的文章