在C#中现有一个List<List<T>>的集合,我如何使用LINQ统计此集合中子集合满足某个条件的部分的T的某个数值属性的SUM值
时间: 2024-03-09 15:44:25 浏览: 25
你可以使用 LINQ 的 SelectMany() 方法将 List<List<T>> 展平为一个 List<T>,然后使用 Where() 方法筛选出符合条件的元素,再使用 Sum() 方法计算数值属性的总和。具体代码如下:
```csharp
List<List<T>> listOfLists = ...;
int sum = listOfLists
.SelectMany(list => list)
.Where(element => element.Condition)
.Sum(element => element.NumberProperty);
```
其中,`Condition` 是子集合中元素需要满足的条件,`NumberProperty` 是 T 的某个数值属性。你需要将它们替换成实际的条件和属性名。
相关问题
在C#中现有一类型为List<List<T>>,T类型中有decimal类型属性,如何适用LINQ将其decimal类型属性精确小数点到2位
你可以使用 LINQ 的 Select 方法和 Math.Round 方法将 List<List<T>> 中的所有 decimal 类型属性保留 2 位小数:
```csharp
List<List<T>> listOfLists = ...;
listOfLists = listOfLists.Select(list => list.Select(item =>
{
if (item is decimal decimalValue)
{
return Math.Round(decimalValue, 2);
}
return item;
}).ToList()).ToList();
```
上面的代码中,我们首先使用 Select 方法对 List<List<T>> 进行遍历,然后再使用 Select 方法对内部的 List<T> 进行遍历。在内部遍历中,我们使用 is 运算符判断当前项是否为 decimal 类型,如果是,则使用 Math.Round 方法将其保留 2 位小数,否则直接返回原始值。
最终,我们将结果存储在一个新的 List<List<T>> 对象中。
C# 50个一组分割List<T>
你可以使用 LINQ 中的 `Skip` 和 `Take` 方法将 `List<T>` 分割成指定大小的多个子列表。以下是示例代码:
```csharp
public static List<List<T>> SplitList<T>(List<T> list, int chunkSize)
{
return Enumerable.Range(0, (int)Math.Ceiling((double)list.Count / chunkSize))
.Select(i => list.Skip(i * chunkSize).Take(chunkSize).ToList())
.ToList();
}
```
你可以使用以下代码来调用上面的方法:
```csharp
var myList = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
var chunkSize = 5;
var resultList = SplitList(myList, chunkSize);
```
这将把 `myList` 分割成大小为 5 的子列表,并将结果存储在 `resultList` 中。