2011-01-31 65 views
0

我有通过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链接查询,但我无法让他们联合,因为我投射到匿名类型。我无法弄清楚如何以不同的方式使工会更好地工作。

那么,我怎样才能将我的元数据收集到一个类似表格的结构中呢?

回答

0

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

当检索结果时,该类遍历每个存储的查询并将结果输入到新的DataTable

0

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