Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用linq和vb.net对以前的记录求和_C#_Vb.net_Linq - Fatal编程技术网

C# 如何使用linq和vb.net对以前的记录求和

C# 如何使用linq和vb.net对以前的记录求和,c#,vb.net,linq,C#,Vb.net,Linq,我在sql中使用此表,并使用vb.net: Table1s {name, money} 我想通过以下表格获得日期: name | money | Sum aaa | 10 | 10 bbb | 5 | 15 ccc | 15 | 30 ddd | 15 | 45 总额=总金额 使用的代码: Dim MonySum As Integer = 0 (From a In Db.Table1s.ToList Select New With {a.Name, a.M

我在sql中使用此表,并使用vb.net:

Table1s {name, money}
我想通过以下表格获得日期:

name | money | Sum
aaa  | 10    | 10
bbb  |  5    | 15
ccc  | 15    | 30
ddd  | 15    | 45
总额=总金额

使用的代码:

Dim MonySum As Integer = 0
(From a In Db.Table1s.ToList
 Select New With {a.Name, a.Money, .Sum = (MonySum = MonySum + a.Money)}).ToList()

但它不起作用。

虽然我最初认为,它不应该简单,因为你的总和是基于它之前的记录,有一种方法可以绕过它,只需使用一个函数返回你当前的总和,并通过每个新的选择增加一个变量

但是,我仍然认为,这应该只在定义订单后计算,因为如果您的用户希望按姓名或按金额订购,那么金额也会不同

但是如果你想的话,这里有一个方法可以做到,我模拟了数据,所以你可能需要做一个小的重构

Module Module1

    Public Class Money
        Public Property Name As String
        Public Property Money As Decimal
    End Class

    Function IncreaseMe(ByRef currentSum As Decimal, value As Decimal) As Decimal
        currentSum += value
        Return currentSum
    End Function

    Sub Main()
        Dim listMoney As New List(Of Money)
        Dim total As Decimal = 0

        listMoney.Add(New Money With {.Money = 10, .Name = "aaa"})
        listMoney.Add(New Money With {.Money = 5, .Name = "bbb"})
        listMoney.Add(New Money With {.Money = 15, .Name = "ccc"})
        listMoney.Add(New Money With {.Money = 15, .Name = "ddd"})

        Dim query = From moneyItem In listMoney
                    Select New With {.Name = moneyItem.Name, .Money = moneyItem.Money, .Sum = IncreaseMe(total, moneyItem.Money)}

        For Each queryItem In query
            Console.WriteLine("{0}{3}{1}{3}{2}", queryItem.Name, queryItem.Money, queryItem.Sum, vbTab)
        Next
        Console.WriteLine("Total money: {0}", total)
        Console.ReadLine()
    End Sub

End Module
在C语言中,它甚至更容易一些,你可以简单地增加局部变量,然后把结果加到和中

static void Main(string[] args)
{
    IList<MoneyTable> money = new List<MoneyTable>();
    money.Add(new MoneyTable { Money = 10, Name = "aaa" });
    money.Add(new MoneyTable { Money = 5, Name = "bbb" });
    money.Add(new MoneyTable { Money = 15, Name = "ccc" });
    money.Add(new MoneyTable { Money = 15, Name = "ddd" });

    decimal totalSum = 0;
    var query = from m in money
                select new { Name = m.Name, Money = m.Money, Sum = (totalSum = totalSum + m.Money) };

    Console.WriteLine("{0}\t{1}\t{2}", "Name", "Money", "Sum");
    foreach (var item in query)
    {
        Console.WriteLine("{0}\t{1}\t{2}", item.Name, item.Money, item.Sum);
    }
    Console.ReadLine();
}

这与来自Icepickle的答案的方法相同,但使用了来自linq的foreach语句

var list = new List<TestObject>
                       {
                           new TestObject { Field1 = 1, Field2 = 10, Stringfield = "Object1" },
                           new TestObject { Field1 = 1, Field2 = 10, Stringfield = "Object2" },
                           new TestObject { Field1 = 1, Field2 = 10, Stringfield = "Object3" },
                           new TestObject { Field1 = 1, Field2 = 10, Stringfield = "Object4" },
                           new TestObject { Field1 = 1, Field2 = 10, Stringfield = "Object5" }
                       };

        var subtotal = 0m;
        list.ForEach(x => x.SubTotalField = subtotal += x.Field1);

        Console.WriteLine("Object\tF1\tF2\tTotal");

        foreach (var testObject in list)
        {
            Console.WriteLine("{0}\t{1}\t{2}\t{3}", testObject.Stringfield, testObject.Field1, testObject.Field2, testObject.SubTotalField);
        }

它不起作用对我不起作用。@SamAxe:你能帮我吗?