我在数据表中使用VB中的LINQ来过滤我的结果。
m_oDataTable.Columns.Add("Name1", GetType(String))
m_oDataTable.Columns.Add("Name2", GetType(String))
m_oDataTable.Columns.Add("Time", GetType(Double))
我正在尝试根据用户选择按Name1
或Name2
过滤数据表。
groupBy = "Name1"
'groupBy = "Name2"
我对数据进行了分组,但我无法Sum
所需的字段。
Dim test = From tab In m_oDataTable.AsEnumerable()
Group tab By groupDt = tab.Field(Of String)(groupBy) Into Group
Select Group
'Getting Error
Dim test2 = From tab In m_oDataTable.AsEnumerable()
Group tab By groupDt = tab.Field(Of String)(groupBy) Into Group
Select New With
{
.Grp = Key, ' Error in this line(Key is a type, cannot be used as a expression)
.Sum = Group.Sum(Function(r) Double.Parse(r.Item("Time").ToString()))
}
我在c#中尝试过并获得了理想的结果。但是VB没有运气:(
var test = from tab in m_oDataTable.AsEnumerable()
group tab by tab.Field<string>(groupBy)
into groupDt
select new
{
Group = groupDt.Key,
Sum = groupDt.Sum(r => double.Parse(r["Time"].ToString()))
};
如何在VB中实现这一点?
答案 0 :(得分:2)
不是100%确定为什么但VB.Net不支持.Key查询表达式语法。您实际上在查询中定义了键变量。您正在尝试使用尚未定义的变量“Key”。相反,您需要使用在查询中定义的键(groupDt)。
更改一个小行,它应该有用......
Select New With
{
.Grp = groupDt,
.Sum = Group.Sum(Function(r) Double.Parse(r.Item("Time").ToString()))
}
或者你可以使用流利的语法:
Dim test2 = Table.AsEnumerable().GroupBy(Function(row) row.Item("Name1")).Select(Function(group) New With {.Grp = group.Key, .Sum = group.Sum(Function(r) Double.Parse(r.Item("Time").ToString()))})