【问题标题】:Convert VB Linq with Group by and Select to C# [duplicate]使用 Group by 和 Select 将 VB Linq 转换为 C# [重复]
【发布时间】:2021-12-15 09:25:21
【问题描述】:

我正在尝试将以下 LINQ 代码从 VB.NET 转换为 C#,这是在 DataTable“tvp_dtl”上执行的。后面是VB代码。

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")))}

这是我用 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"))))
        };

但我认为这是不正确的。此外,使用“tvp_dtl”时出现此错误

找不到源查询模式的实现 键入“数据表”。未找到分组依据

【问题讨论】:

    标签: linq c#-to-vb.net vb.net-to-c#


    【解决方案1】:

    DataTable 不是IEnumerable,更糟糕的是,它没有提供编译器所需的方法来充当可枚举。

    public class DataTable : MarshalByValueComponent, IListSource, ISupportInitializeNotification, ISupportInitialize, ISerializable, IXmlSerializable
    

    幸运的是,有一种扩展方法可以解决这个问题。

    试试这个:

    var query =
        from row in tvp_dtl.AsEnumerable()
    

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多