我有一个列表,其中包含假设4列我想要删除从第一行到最后一行包含0的列。在这种情况下,我想删除第二&第4列我如何使用lambda表达式c#4.0
来实现这一点c1 c2 c3 c4
1 0 10 0
2 0 20 0
3 0 30 0
o / p应该是
c1 c2
1 10
2 20
3 30
答案 0 :(得分:1)
您无法从对象中删除属性。您应该将数据转换为实际可以删除列的内容,例如列表列表:
List<List<int>> list = originalList.Select(
i => new List<int>(){ i.c1, i.c2, i.c3, i.c4 }
).ToList();
现在,您可以检查列表中的数据并删除列:
int i=0;
while (i < list[0].Count) {
if (!list.Any(x => x[i] != 0)) {
foreach (List<int> item in list) {
item.RemoveAt(i);
}
} else {
i++;
}
}
另一种方法是对角镜像列表,即将其转换为包含每个项目数据的列列表,而不是包含列的项目列表。这样可以更容易删除列,但其他一些操作会更难,例如对项目进行排序。
答案 1 :(得分:0)
在LINQ查询的where子句中使用'SUM'。它可能类似于C2列的总和大于零的情况。 This SO question可能对您有所帮助。
答案 2 :(得分:0)
假设您将列表实现为嵌套列表,您可以执行以下操作:
List<List<int>> lists = new List<List<int>>();
// fill data here
// ...
// ...
List<List<int>> filtered = lists.Where(lst => lst.Any(num => num != 0)).ToList();
如果您需要的是仅包含满足条件的属性的对象,则应使用反射(或者可能是.NET 4.0中的Dynamic对象)。在那种情况下,我不会强迫用lambdas做。
尝试更详细地解释您的数据结构,以便有人提供有用的答案。