# 如何在LINQ中的单个查询中使用不同的()和sum()[英] How to Use Distinct() and Sum() in Single Query in Linq ### 问题描述

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

## 推荐答案

```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));
}

}
```

1 123

2 226

3 369

4 48

5 5

## 其他推荐答案

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

### 问题描述

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

## 推荐答案

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.

## 其他推荐答案

Group by Id. Than you can do :

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