c# - 使用 linq 和 lambdas 的多分隔字符串到对象列表

标签 c# arrays linq lambda

概览

我有一个由逗号分隔的字符串,表示对象,空格表示这些对象的属性:

string sOrderBy = "Column1 ASC, Column2 DESC";

我需要将其转换为 List<OrderByColumn>其中 OrderByColumn是:

public class OrderByColumn
{
    public string ColumnName { get; set; }
    public bool IsAscending { get; set; }
}

问题

sOrderBy.Split(',').Select(x => new OrderByColumn()
{
    ColumnName = x.Trim().Split(' ')[0].Trim(),
    IsAscending = x.Trim().Split(' ')[1].Trim() == "ASC" ? true : false
}).ToList<OrderByColumn>();

上面的代码可以工作,但是在调用 x.Trim().Split(' ') 时存在一些冗余不止一次。 (另外,我知道代码目前假定 0 和 1 数组值在那里)。

有没有办法消除这种冗余?以某种方式传递 x.Trim().Split(' ') 的结果到一个匿名函数,然后返回一个 OrderByColumn对象从那里?

我知道我可以使用两个 for/foreach 循环来解决这个问题,但是 linq 和 lambdas 太酷了! :-)

最佳答案

如何在 Select 中引入一个临时变量:

sOrderBy.Split(',').Select(x => 
    {
        var trimmedSplitted = x.Trim().Split(' ');
        return new OrderByColumn()
        {
            ColumnName = trimmedSplitted[0].Trim(),
            IsAscending = (trimmedSplitted[1].Trim() == "ASC")
        };
    }
).ToList<OrderByColumn>()

关于c# - 使用 linq 和 lambdas 的多分隔字符串到对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12696096/

相关文章:

c# - 'Distinct' 操作无法应用于指定参数的集合ResultType

sql-server - 我可以使用 LINQ 对 SQL Server 中的 IQueryable 进行联接吗?

c# - 如何检查页面是否作为提交表单或其他方式的结果显示

c# - 计算可调利率抵押贷款的财务公式?

c++ - 在构造函数的初始化列表中初始化数组

二维字符串数组的 C 内存布局

c# - linq按自定义类分组

javascript - 根级别的数据在 $.ajax 调用中无效

c# - 如何绘制格式化文本(如果不在 onRender 方法中)

javascript - 按 Id 对数组中的对象进行分组 - JavaScript