按属性列出组,然后计算另一个属性的不同值,并将count写入list属性

时间:2013-10-20 22:06:46

标签: c# linq count group-by distinct

我有一个列表,其中包含一个类的大约50个属性。我正在努力解决的问题是我试图计算两个属性的明显值。这个"计算"然后需要将数字添加到每个组列表的末尾。 例如:这是我的班级

 public class ListType
{
    public ListType()
    {
    }

    public string ID { get; set; }
    public string REGSID { get; set; }
    public string county { get; set; }
    public string act_loc { get; set; }
    public string eviofnd { get; set; }
    public string hmonth { get; set; }
    public string hisnc { get; set; }
    public string hinc { get; set; }
    public string FIPS { get; set; }
    public decimal back00 {get; set;}
    public decimal ann00 { get; set; }
    public int countDistinctID {get;set;}

  }

我需要计算每个不同FIPS的不同IDS,然后将不同IDS的计数设置为每个分组FIPS的countDistinctID属性。       ID FIPS其他列(尽管仍需要此数据)

  4        1      ......

  5        2       ....

  4        1      ....

  4        2       ....

  1        3     .....

  1        2      ....

  2        1      .....

我需要的是......       ID FIPS其他列数       4 1 ...... 2 3行,FIPS = 1,然后2个不同ID,每个FIP = 1

  5        2       ....         3   3 rows w/FIPS=2 3 distinct IDS per FIps=2    

  4        1      ....          2

  4        2       ....         3

  1        3     .....          1   1 row w/fips=3 1 distinct id perFIPS=3

  1        2      ....          3

  2        1      .....         2

我已在文件中解析并将所有列写入名为List data的列表

在我计算了不同的ID之后我最终需要做的是设置计数值为原始"数据"的countDistinctID。列表并为每个不同的FIPS和每个不同的FIPS和ID执行此操作         census.countDistinctID

2 个答案:

答案 0 :(得分:2)

试试这个

var distinct = censu.Select(a => a.Select(x=>x.ID).Distinct().Count());

答案 1 :(得分:1)

var censu = data.GroupBy(a => a.FIPS).ToList();
foreach (var grp in censu)
{
     var count = grp.Select(p=>p.ID).Distinct().Count();
     foreach (var d in grp)
             d.countDistinctID = count;
 }