How to Use Distinct() and Sum() in Single Query in Linq

妖精的绣舞 提交于 2020-01-05 11:31:20

问题


Here I have 2 Columns like Id,Quantity. I want get the Distinct Id and its Quantity Sum in LINQ. I tried like this

var r = list.Where(some operation)
            .Select(x => x.Id)
            .Distinct()
            .Select(x => (int?)x.Quantity))
            .Sum();

Here at x.Quantity I got error..how can I solve this.. please give your suggestions


回答1:


If I assume that Id is int and Quantity is string, then you can use aggregate also. Below is one example:

class TestClass
{
    public int I { get; set; }
    public string S { get; set; }
}

class Program
    {
        static void Main()
        {
            var myclass = new TestClass[]
            {
                new TestClass {I = 1, S = "1"}, new TestClass { I = 1, S = "11" }, new TestClass { I = 1, S = "111" },
                new TestClass {I = 2, S = "2"},new TestClass {I = 2, S = "222"},new TestClass {I = 2, S = "2"},
                new TestClass {I = 3, S = "3"},new TestClass {I = 3, S = "333"},new TestClass {I = 3, S = "33"},
                new TestClass {I = 4, S = "44"},new TestClass {I = 4, S = "4"},
                new TestClass {I = 5, S = "5"}
            };

            var filteredObject = myclass.GroupBy(x => x.I).Select(y => new
            {
                I = y.Key,
                S = y.Select(z => z.S).Aggregate((a, b) => (Convert.ToInt32(a) + Convert.ToInt32(b)).ToString())
            });

            filteredObject.ToList().ForEach(x => Console.WriteLine(x.I + "    " + x.S));
        }

    }

Result is like:

1 123

2 226

3 369

4 48

5 5

Press any key to continue . . .

Hope it helps.




回答2:


Group by Id. Than you can do :

.GroupBy(x => x.Id)
.Select(x => new { x.Key, x.Sum(y => (int?)y.Quantity) });


来源:https://stackoverflow.com/questions/31470409/how-to-use-distinct-and-sum-in-single-query-in-linq

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!