动态生成LINQ

本文关键字:LINQ 动态 | 更新日期: 2023-09-27 18:25:49

我想在txt文件中对数据进行排序,为此我使用了下面的LINQ。。。

var lines = File.ReadLines(fileInfo.FullName)
            .Select(x => x.Split('|').Reverse().ToArray())
            .OrderBy(x => x[0])
            .ThenBy(x => x[1])
            .Select(x => string.Join("|", x));

问题是,这仅限于用于排序的索引0和1。

我想从外部传递列索引(用户输入),然后构造LINQ查询。可能有一列要排序,也可能有多列要排序。

有人能帮助我在运行时构建这种类型的linq并获得结果吗。

提前谢谢。

动态生成LINQ

您可以使用类似的东西:

public void DoIt(int[] sortIndexes) 
{
    var lines = File.ReadLines(fileInfo.FullName)
            .Select(x => x.Split('|').Reverse().ToArray())
            .OrderBy(x => 0);
    foreach (int index in sortIndexes) 
    {
        lines = lines.ThenBy(x => x[index]);
    }
    lines = lines.Select(x => string.Join("|", x));
}

您可以使用动态LINQ。它可以从NuGet和项目网站上获得。

语法与上面的略有不同,但非常接近.OrderBy(x[1])