C# 动态组合判断条件对数据进行筛选
一、设计背景
工作上需求开发一个文本处理软件,我要在界面上编辑文本筛选条件,这就需要动态判断每一行文本数据。我首先是将单行文本根据空格分割成了几十个子串,然后对子串进行条件判断。一开始设想的动态组合判断条件,然后一行一行的判断数据。但能够实现的方法是完整的数据在动态组合的判断条件序列中依次过滤,最后给出一个过滤后的结果。
二、技术实现思考
我要实现的要求如下:
- 有效数据分割后子串数量应该大于13个
- 有效数据行StringArray[5]转换成int后要大于3
- 只要StringArray[6]等于“02”的数据
其中动态判断条件的方式为:创建了一个IEnumerable<string[]>
类型的变量query
,并将其初始化为listOfStringArrays
。然后,我们依次调用了Where
方法来应用每个筛选条件。每次调用Where
都会返回一个新的IEnumerable<string[]>
,它表示应用当前条件后的结果集。最后,我们将最终的IEnumerable<string[]>
转换为List<string[]>。
代码实现示例:
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
// 示例数据
List<string[]> listOfStringArrays = /* ...(同前)... */;
// 初始的IEnumerable<string[]>
IEnumerable<string[]> query = listOfStringArrays;
// 逐步应用筛选条件
query = query.Where(array => array.Length > 6); // 确保数组有足够的元素
query = query.Where(array => int.TryParse(array[5], out int number) && number > 5); // 尝试将string[5]转换为int并检查是否大于5
query = query.Where(array => array[6] == "02"); // 检查string[6]是否等于"02"
// 将最终的IEnumerable<string[]>转换为List<string[]>
var filteredList = query.ToList();
// 输出筛选后的结果
foreach (var array in filteredList)
{
Console.WriteLine(string.Join(", ", array));
}
}
}
三、个人总结
虽然这种方法在代码上看起来更加冗长,但允许逐步构建和测试查询的每个部分,这在处理复杂查询时非常有用。此外,如果需要在不同的上下文中重用某些筛选条件,还可以将它们封装到单独的函数中,并在需要时调用这些函数。
后期可能还会接着完善,先把已经实现的代码和思路写在这里。