Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LinqToExcel时无法随机排序_C#_List_Linq_Linq To Excel - Fatal编程技术网

C# 使用LinqToExcel时无法随机排序

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.

我正在使用麻省理工学院开发的LinqToExcel项目,该项目托管在Google Code at上,从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 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的文章