将vb.net linq转换为c# linq

本文关键字:linq 转换 net vb | 更新日期: 2023-09-27 18:15:27

我在VB.net中有以下功能,并试图将其转换为c#,但我有困难。有人能帮我一下吗?

代码如下:

    Dim subset = Sheets.Where(Function(kvp As KeyValuePair(Of Integer, Sheet)) kvp.Value.Members.Where(Function(m As Member) m.MemberType = MemberType).Count() > 0)
    subset.ToList().ForEach(Sub(kvp As KeyValuePair(Of Integer, Sheet)) WeightByType += (kvp.Value.Members.Sum(Function(m As Member) Convert.ToDecimal(m.TotalWeight, CultureInfo.InvariantCulture))))

将vb.net linq转换为c# linq

应该是这样的:

var subset = Sheets.Where(kvp => kvp.Value.Members.Where(m => m.MemberType == MemberType).Count()> 0);
subset.ToList().ForEach(kvp => WeightByType += (kvp.Value.Members.Sum(m => Convert.ToDecimal(m.TotalWeight, CultureInfo.InvariantCulture))));

这些都可以简化为以下内容

return Sheets
    .Where(kvp => kvp.Value.Members.Where(m => m.MemberType == MemberType).Count() > 0)
    .Sum(kvp => kvp.Value.Members.Sum(m => Convert.ToDecimal(m.TotalWeight, CultureInfo.InvariantCulture)));

我把这两个答案都拿来用了。新代码看起来像这样:

decimal wbt = 0;
        wbt += MbrSheets
         .Where(kvp => kvp.Value.Members.Where(m => m.MemberType == MemberType).Count() > 0)
         .Sum(kvp => kvp.Value.Members.Sum(m => Convert.ToDecimal(m.TotalWeight, CultureInfo.InvariantCulture)));
        return wbt;

不确定您是否知道这个,但是有一个非常好的在线代码转换器,Telerik已经启动并运行了很长时间了。

我过去用它很幸运。它将从VB转换为c#,反之亦然。

http://converter.telerik.com