I am trying to convert the following LINQ code from VB.NET to C#, which is performed on the DataTable "tvp_dtl". Followed by VB code.
Dim query
query = From row In tvp_dtl
        Group row By dataGroup = New With {
            Key .Tmall_txn_no = row.Field(Of String)("Tmall_txn_no"),
            Key .stock_code = row.Field(Of String)("stock_code"),
            Key .ItemNameLocalLang = row.Field(Of String)("ItemNameLocalLang"),
            Key .ItemUnitPrice = row.Field(Of String)("ItemUnitPrice"),
            Key .itemTotalAmount = row.Field(Of String)("itemTotalAmount")
        } Into Group
        Select New With {
            .Tmall_txn_no = dataGroup.Tmall_txn_no,
            .stock_code = dataGroup.stock_code,
            .ItemNameLocalLang = dataGroup.ItemNameLocalLang,
            .ItemUnitPrice = dataGroup.ItemUnitPrice,
            .itemTotalAmount = dataGroup.itemTotalAmount,
            .SumAmount = Group.Sum(Function(x) Integer.Parse(x.Field(Of String)("ItemNumber")))}
Here is the version I wrote in C#
var query = from row in tvp_dtl
        group row by new
        {
            row.Tmall_txn_no = row.Field<string>("Tmall_txn_no"),
            row.stock_code = row.Field<string>("stock_code"),
            row.ItemNameLocalLang = row.Field<string>("ItemNameLocalLang")
        } into dataGroup
        select new
        {
            Tmall_txn_no = dataGroup.Field<string>("Tmall_txn_no"),
            stock_code = dataGroup.Field<string>("stock_code"),
            ItemNameLocalLang = dataGroup.Field<string>("ItemNameLocalLang"),
            ItemUnitPrice = dataGroup.Field<string>("ItemUnitPrice"),
            itemTotalAmount = dataGroup.Field<string>("itemTotalAmount"),
            SumAmount = dataGroup.Sum(x => int.Parse(x.Field<string>("ItemNumber") * int.Parse(x.Field<string>("QtyPerSet"))))
        };
But I think it is incorrect. Besides I got this error when using "tvp_dtl"
Could not find the implementation of the query pattern for source type "DataTable". Group By not found
 
    