Linq to DataSet,嵌套分组依据?

标签 linq datatable group-by nested

我正在尝试在数据表上运行 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}
                    };

这是我的数据表结构:(日期/时间与 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) Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.

2) Could not find an implementation of the query pattern for source type 'object'. 'GroupBy' not found.



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

最佳答案

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

我定义了两个类来将您的信息放在一起:

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
                                           };

关于Linq to DataSet,嵌套分组依据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8055863/

相关文章:

c# - 从 DataTable 创建 XML

sql - 每行SQL中相同ID的总和

c# - 在 linq 查询中获取计数

C# - 按照另一个列表中项目的顺序高效地从一个列表中提取项目

C# LINQ - 从单个元素中检索多个属性,转换为结构化(非 xml)文本

c# - 如何将 DataTable 转换为 List<KeyValuePair<string, int>>

c# - 如何结合SQL查询使用TableAdapterManager及相关数据表

sql - 在 C# 中按总和 Linq to SQL 分组

mysql - Doctrine 中仅加载具有附加实体的实体的最佳方法

linq - 定期 InvalidCastException 和 "The server failed to resume the transaction"与 Linq