我正在尝试在数据表上运行Linq查询以生成结果,由User过滤然后进入Date。我正在关注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'找不到。
最后,感谢您阅读我的帖子并提前感谢您的帮助。
答案 0 :(得分:3)
您不能将匿名类型的属性名称定义为字符串:
我已经定义了两个类来获取您的信息:
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
};