【问题标题】:Linq to DataSet, Nested Group By?Linq to DataSet,嵌套分组依据?
【发布时间】:2011-11-08 19:17:15
【问题描述】:

我正在尝试对数据表运行 Linq 查询以产生结果,由用户过滤,然后进入日期。我正在关注 Group By 的示例 - 嵌套在 Linq 101 示例页面 here

但是我无法让它工作。我遇到了几个错误。所以我希望有人能帮我创建查询,或者至少帮助我走上正轨。

这是我从示例中汇总的当前非工作代码。

var results =
                 from d in dataTableResults.AsEnumerable()
                 select new 
                    { 
                        d["DIMS User"],
                        DateGroup =
                            from o in d["Entry Date"]
                            group o by o["Entry Date"] into dg
                            select new { "Entry Date" = dg.Key, "DIMS user" = dg}
                    };

这是我的 DataTable 结构:(日期/时间与 ShortDateToString/ShortTimetoString 解析分开)

LogData.Columns.Add("System User", typeof(string));
LogData.Columns.Add("Host Name", typeof(string));
LogData.Columns.Add("DIMS User", typeof(string));
LogData.Columns.Add("Entry Details", typeof(string));
LogData.Columns.Add("Asset Name", typeof(string));
LogData.Columns.Add("Entry Date", typeof(string));
LogData.Columns.Add("Entry Time", typeof(string));

我收到的错误是:

1) 无效的匿名类型成员声明器。匿名类型成员 必须使用成员分配、简单名称或成员声明 访问。

2) 找不到源查询模式的实现 输入“对象”。未找到“GroupBy”。

最后,感谢您阅读我的帖子,并提前感谢您的帮助。

【问题讨论】:

    标签: linq datatable group-by nested


    【解决方案1】:

    您不能将匿名类型的属性名称定义为字符串:

    我已经定义了两个类来收集你的信息:

    internal class Entry
    {
        public string SystemUser { get; set; }
        public string HostName { get; set; }
        public string DIMSUser { get; set; }
        public string EntryDetails { get; set; }
        public string AssetName { get; set; }
        public string EntryDate { get; set; }
        public string EntryTime { get; set; }
    }
    
    internal class UserEntryPerDateInfo
    {
        public string DIMSUser { get; set; }
        public string EntryDate { get; set; }
        public IEnumerable<Entry> EntryList { get; set; }
    }
    

    在这里填充数据:

    IEnumerable<Entry> dataList = from d in dataTableResults.AsEnumerable()
                                  select new Entry
                                    {
                                        SystemUser=d["SystemUser"],
                                        HostName=d["Host Name"],
                                        DIMSUser=d["DIMS User"],
                                        EntryDetails=d["Entry Details"],
                                        AssetName=d["Asset Name"],
                                        EntryDate=d["Entry Date"],
                                        EntryTime=d["Entry Time"],
                                    };
    

    然后你按日期和用户分组并将它们放在另一个类中:

    IEnumerable<UserEntryPerDateInfo> result = from a in dataList
                                               group a by new {User = a.DIMSUser, EntryDate = a.EntryDate}
                                               into grouped
                                               select
                                               new UserEntryPerDateInfo
                                               {
                                                   DIMSUser = grouped.Key.User,
                                                   EntryDate = grouped.Key.EntryDate,
                                                   EntryList = grouped
                                               };
    

    【讨论】:

    • 谢谢,现在离工作更近了。我仍然收到错误“找不到源类型'object'的查询模式的实现。找不到'GroupBy'”。对于这段代码:from o in d["Entry Date"]
    • 你想在 DateGroup 中得到什么?你从 d["EntryDate"] 得到什么?
    • 日期,它们都来自同一个数据表,我只想按用户和日期分组。
    • 您想按用户或日期对它们进行分组吗?
    • 两者,先用户后日期,这可能吗?
    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多