DataTable中的表结构是这样的:
ID Name ACount BCount CCount Date,Alarm其中:Alarm是布尔型,想得到如下结果:
Select ID,Name,Sum(ACount),Sum(BCount),Sum(CCount),Min(date),Alarm     From Tbl 
上面的结果中,只有被Group by的行中有一个Alram = true,结果集中就为True。请问LINQ怎么写?

解决方案 »

  1.   

    你是要LINQ TO SQL 还是LINQ TO Object啊
      

  2.   


    LINQ操作的对象是DataTable
    因该是LinQ TO DataSet 吧
      

  3.   

    那就是Linq TO Objcet了,而且你这种方式已经很不简单了。dt.Rows.Cast<DataRow>()
        .GroupBy((t) => new { ID = (int)t["ID"], Name = (string)t["Name"], Alarm = (bool)t["Alarm"] == true })
        .Select((g) => new { g.Key.ID, g.Key.Name, ACount = g.Sum((t) => (decimal)t["ACount"]), BCount = g.Sum((t) => (decimal)t["BCount"]), CCount = g.Sum((t) => (decimal)t["CCount"]), Date = g.Min((t) => (decimal)t["Date"]) });
      

  4.   

    数据类型错了,重贴:
    dt.Rows.Cast<DataRow>()
        .GroupBy((t) => new { ID = (int)t["ID"], Name = (string)t["Name"], Alarm = (bool)t["Alarm"] == true })
        .Select((g) => new { g.Key.ID, g.Key.Name, ACount = g.Sum((t) => (decimal)t["ACount"]), BCount = g.Sum((t) => (decimal)t["BCount"]), CCount = g.Sum((t) => (decimal)t["CCount"]), Date = g.Min((t) => (DateTime)t["Date"]) });
      

  5.   


    还有个Alarm字段呢
    要求是:只有被Group by的行中有一个Alram = true,结果集中就为True。 另外,这么些最后的结果是一个匿名类型。我希望得到的结果是DataRow
    应该怎么写呢?
      

  6.   

    dt.Rows.Cast<DataRow>()
        .GroupBy((t) => new { ID = (int)t["ID"], Name = (string)t["Name"], Alarm = (bool)t["Alarm"] == true })
        .Select((g) =>
                    {
                        DataRow dr = permissionTable.NewRow();
                        dr["ID"] = g.Key.ID;
                        dr["Name"] = g.Key.Name;
                        dr["ACount"] = g.Sum((t) => (decimal)t["ACount"]);
                        dr["BCount"] = g.Sum((t) => (decimal)t["BCount"]);
                        dr["CCount"] = g.Sum((t) => (decimal)t["CCount"]);
                        dr["Date"] = g.Min((t) => (DateTime)t["Date"]);
                        dr["Alarm"] = g.Key.Alarm;
                        return dr;
                    });
      

  7.   

    是不是过滤掉false的结果,我反正是这么理解的。