将元数据收集到表中

时间:2011-01-31 20:16:28

标签: c# .net linq datatable

我有通过C#程序的tabluar数据,我需要在完成之前收集一些元数据。元数据始终基于数据字段计数。另外,我需要将它们全部按数据中的一个字段分组。我需要定期向此元数据集添加新计数。

我已经研究了一段时间,我认为有意义的是重新编写我的程序以将数据存储为DataTable,然后在表上运行LINQ查询。我遇到的问题是能够将不同的计数放入一个类似于表的结构中,然后将其写出来。

我可能会运行这样的查询:

var query01 = 
    from record in records.AsEnumerable()
    group record by record.Field<String>("Association Key") into associationsGroup
    select new { AssociationKey = associationsGroup.Key, Count = associationsGroup.Count<DataRow>() };

获取按字段关键字分组的所有记录的计数。我想要另一个计数,以相同的方式分组:

var query02 =
    from record in records.AsEnumerable()
    where record.Field<String>("Number 9") == "yes"
    group record by record.Field<String>("Association Key") into associationsGroup
    select new { AssociationKey = associationsGroup.Key, Number9Count = associationsGroup.Count<DataRow>() };

等等。

我考虑过尝试Union链接查询,但由于我正在投射到匿名类型,因此我无法将它们联合起来。我无法弄清楚如何以不同方式做到让工会更好地工作。

那么,我如何将我的元数据收集到一个类似于表的结构中呢?

2 个答案:

答案 0 :(得分:0)

因为你有不同的类型,所以不会结合。将Number9Count和Count添加到两个匿名类型并再次尝试联合。

答案 1 :(得分:0)

我最后通过创建一个包含我需要的记录集DataTable的类来解决问题。用户可以通过方法添加查询,并使用参数Func<DataRow, bool>。该方法构造提供该参数作为where子句的查询,在生成的匿名类型对象中保持相同的分组和属性。

检索结果时,类会迭代存储的每个查询,并将结果输入新的DataTable

相关问题