C# Linq到文件助手类

C# Linq到文件助手类,c#,.net,linq,file-io,filehelpers,C#,.net,Linq,File Io,Filehelpers,我试图在文件中获取linq查询的结果。我创建了与我创建的FileHelpers类相同类型的和数组,然后查询数据并将值分配给我刚刚创建的数组 我得到以下错误: Object reference not set to an instance of an object. 奇怪的是,发出错误的项目就是得到赋值的项目。不确定为什么会发生这种情况: NorthwindEntities dbContext = new NorthwindEntities(); var q = from d i

我试图在文件中获取linq查询的结果。我创建了与我创建的FileHelpers类相同类型的和数组,然后查询数据并将值分配给我刚刚创建的数组

我得到以下错误:

Object reference not set to an instance of an object.
奇怪的是,发出错误的项目就是得到赋值的项目。不确定为什么会发生这种情况:

NorthwindEntities dbContext = new NorthwindEntities();
        var q = from d in dbContext.Products
                select d;
        producdt[] items = new producdt[q.Count()];

        for (int i = 0; i < q .Count(); i++)
        {
            items[i].Field1 = q.ToList()[i].ProductName;
        }
        FileHelperEngine<producdt> engine = new FileHelperEngine<producdt>();
            engine.WriteFile("test.text", items);
在for循环中使用项[i]之前,必须对其进行初始化。问题是您已经创建了数组,但其单个元素为空。我想在使用Select进行一些投影之后,您应该将linq查询的返回分配给这个数组

虽然我不知道你们班的具体情况,但我想你们应该按照以下几行来做:

producdt[] items = (from d in dbContext.Products
                   select new producdt(){ 
                                          Field1 = d.Field1, 
                                          Field2 = d.Field2, 
                                          Field3 = d.Field3, 
                                          Field4 = d.Field4
                                         }).ToArray();
在for循环中使用项[i]之前,必须对其进行初始化。问题是您已经创建了数组,但其单个元素为空。我想在使用Select进行一些投影之后,您应该将linq查询的返回分配给这个数组

虽然我不知道你们班的具体情况,但我想你们应该按照以下几行来做:

producdt[] items = (from d in dbContext.Products
                   select new producdt(){ 
                                          Field1 = d.Field1, 
                                          Field2 = d.Field2, 
                                          Field3 = d.Field3, 
                                          Field4 = d.Field4
                                         }).ToArray();

也就是说,假设productdt是最有可能的引用类型,尽管它有助于准确地知道错误发生在哪一行。WriteFile方法接受IEnumerable,因此您也可以避免ToArray。var items=来自dbContext中的d。产品选择新的producdt{Name=d.Name};这就是我在尝试上面的赋值时出现的错误:错误6无法将类型“AnonymousType1[]”隐式转换为“producdt”@user2275571:您可以在问题中包含productdt类的主体吗?检查上面…我添加了类,即假设productdt是最有可能的引用类型,虽然这有助于准确地知道错误发生在哪一行。WriteFile方法接受IEnumerable,因此您也可以避免ToArray。var items=来自dbContext中的d。产品选择新的producdt{Name=d.Name};这是我在尝试上面的赋值时出现的错误:错误6无法将类型“AnonymousType1[]”隐式转换为“producdt”@user2275571:您可以在问题中包含producdt类的主体吗?检查上面的内容…我已将classIs producdt添加为对象或记录?此外,这也可以得到极大的优化,您可以在这里访问数据库三次,而实际上一次就可以完成。错误出现在行项目[i].field1=q.ToList[i].ProductName;让我重新表述一下-producdt是一个类还是一个记录?producdt是一个类:[FixedLength RecordFixedMode.ExactLength]公共密封类producdt{[FieldFixedLength10]公共字符串字段1;[FieldFixedLength10]公共字符串字段2;[FieldFixedLength10]公共字符串字段3;[FieldFixedLength10]公共字符串字段4;[FieldFixedLength10]public String Field5;}@dotNET建议的解决方案将为您完成这项工作。不仅如此,它更有效,因为您只需到DB进行一次行程…在您至少进行3次行程的那一分钟,producdt是一个对象还是一个记录?此外,这也可以得到极大的优化,您可以在这里访问数据库三次,而实际上一次就可以完成。错误出现在行项目[i].field1=q.ToList[i].ProductName;让我重新表述一下-producdt是一个类还是一个记录?producdt是一个类:[FixedLength RecordFixedMode.ExactLength]公共密封类producdt{[FieldFixedLength10]公共字符串字段1;[FieldFixedLength10]公共字符串字段2;[FieldFixedLength10]公共字符串字段3;[FieldFixedLength10]公共字符串字段4;[FieldFixedLength10]public String Field5;}@dotNET建议的解决方案将为您完成这项工作。不仅如此,它更有效,因为您只需到DB进行一次行程……在这一分钟,您至少要进行三次行程。