动态生成LINQ

时间:2014-10-07 04:58:14

标签: c# linq sorting expression

我想对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查询。可以有1列排序或多列。

任何人都可以帮助我在运行时构造这种类型的linq并获得结果。

提前致谢。

2 个答案:

答案 0 :(得分:3)

你可以使用类似的东西:

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

}

答案 1 :(得分:0)

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

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