C# 将数据放入DataTable,获得MemoryOfExection
从Datatable的值生成标头时遇到问题。我有一个文本文件,我在其中搜索一些字符串。将它们拆分并放入数据表中。之后,我使用一些linq代码将列“Name”作为该表的标题。对于小的文本文件,它工作得很好,但当我得到小的更大的文件时,我的编译器抛出MemoryOutOfExeption。所以我在问我如何修复我的代码 我的代码:C# 将数据放入DataTable,获得MemoryOfExection,c#,linq,datatable,out-of-memory,C#,Linq,Datatable,Out Of Memory,从Datatable的值生成标头时遇到问题。我有一个文本文件,我在其中搜索一些字符串。将它们拆分并放入数据表中。之后,我使用一些linq代码将列“Name”作为该表的标题。对于小的文本文件,它工作得很好,但当我得到小的更大的文件时,我的编译器抛出MemoryOutOfExeption。所以我在问我如何修复我的代码 我的代码: DataTable evHeader00 = resAtt.Copy(); var prds1 = evHeader00.AsEnumer
DataTable evHeader00 = resAtt.Copy();
var prds1 = evHeader00.AsEnumerable() // make Name Values as header
.GroupBy(c => c["Name"])
.Where(g => !(g.Key is DBNull))
.Select(g => (string)g.Key)
.ToList();
prds1.ForEach(p => evHeader00.Columns.Add(p, typeof(string))); // Here i got MemoryOutOfExeption
foreach (var row in evHeader00.AsEnumerable())
{
if (!(row["Name"] is DBNull))
{
row[(string)row["Name"]] = row["Products"];
}
}
数据表1:
ID Name Products
1 a A
2 b B
3 c C
... ... ...
结果:
ID a b c ...
1 A
2 B
3 C
... ... ... ... ...
DataTable
DataTable evHeader00 = resAtt.Copy();
列表
var prds1 = evHeader00.AsEnumerable() // make Name Values as header
.GroupBy(c => c["Name"])
.Where(g => !(g.Key is DBNull))
.Select(g => (string)g.Key)
.ToList();
IEnumerable<string> data = resAtt.AsEnumerable()
.Where(r => !r.Field<string>("Name") == null)
.GroupBy(r => r.Field<string>("Name"))
.Select(g => g.Key);
现在,您可以使用
foreach
枚举结果。有多少行有“稍大的文件”如果编译器抛出异常,则不是数据。问题是,它真的是编译器吗?因此,在执行代码时不是这样吗?最好选择不同的“Name”
值,而不是按“Name”
值分组,然后只选择键。蒂姆:所以我使用了代码u give mevar prds1=resAtt.AsEnumerable()。其中(r=>!(r.Field(“Name”)==null)).Select(r=>r.Field(“Name”)).Distinct().ToList();prds1.ForEach(p=>resAtt.Columns.Add(p,typeof(string))代码>但它会抛出相同的错误。MemoryOutOfException@LeVietHung你看到我回答的第二点了吗您不需要创建新列表,只需使用foreach
枚举查询即可。请注意,不是这样!蒂姆:好的,我用foreachforeach(prds1中的字符串st){resAtt.Columns.Add(st);}
更改了我的代码,但是同样的错误,我在这里做错了什么吗?@LeVietHung:但是你真的得到了Distinct
的异常吗?您是否试图省略不同的
,只是为了确保是它引起的?您在resAtt.columns.Add中创建了多少列?
IEnumerable<string> data = resAtt.AsEnumerable()
.Where(r => !r.Field<string>("Name") == null)
.Select(r => r.Field<string>("Name"))
.Distinct();