0

結果をフィルタリングするために、データテーブルで 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でこれを達成する方法は?

4

1 に答える 1

2

理由は 100% わかりませんが、VB.Net はクエリ式構文の .Key をサポートしていません。実際には、クエリでキー変数を定義します。定義されていない変数「キー」を使用しようとしています。代わりに、クエリで定義したキー (groupDt) を使用する必要があります。

1行の小さな行を変更すると、うまくいくはずです...

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()))})
于 2013-06-24T08:02:46.677 に答える