C# 使用linq和lambdas将多分隔字符串添加到对象列表 概述
我有一个由逗号分隔的字符串,表示对象,空格表示这些对象的属性:C# 使用linq和lambdas将多分隔字符串添加到对象列表 概述,c#,arrays,linq,lambda,C#,Arrays,Linq,Lambda,我有一个由逗号分隔的字符串,表示对象,空格表示这些对象的属性: string sOrderBy = "Column1 ASC, Column2 DESC"; 我需要将其转换为列表,其中OrderByColumn是: public class OrderByColumn { public string ColumnName { get; set; } public bool IsAscending { get; set; } } 问题 sOrderBy.Split(',')。选
string sOrderBy = "Column1 ASC, Column2 DESC";
我需要将其转换为列表
,其中OrderByColumn
是:
public class OrderByColumn
{
public string ColumnName { get; set; }
public bool IsAscending { get; set; }
}
问题
sOrderBy.Split(',')。选择(x=>neworderbycolumn()
{
ColumnName=x.Trim().Split(“”)[0]。Trim(),
IsAscending=x.Trim().Split(“”)[1]。Trim()=“ASC”?真:假
}).ToList();
上面的代码可以工作,但是多次调用x.Trim().Split(“”)
会有一些冗余。(另外,我知道代码当前假定存在0和1数组值)
有没有办法消除这种冗余?以某种方式将x.Trim().Split(“”)
的结果传递给匿名函数,然后从那里返回一个OrderByColumn
对象
我知道我可以使用两个for/foreach循环来解决这个问题,但是linq和lambdas太酷了!:-) 在
选择中引入一个临时变量怎么样
sOrderBy.Split(',').Select(x =>
{
var trimmedSplitted = x.Trim().Split(' ');
return new OrderByColumn()
{
ColumnName = trimmedSplitted[0].Trim(),
IsAscending = (trimmedSplitted[1].Trim() == "ASC")
};
}
).ToList<OrderByColumn>()
sOrderBy.Split(',')。选择(x=>
{
var trimmedSplitted=x.Trim().Split(“”);
返回新的OrderByColumn()
{
ColumnName=trimmedSplitted[0]。Trim(),
IsAscending=(trimmedSplitted[1]。Trim()=“ASC”)
};
}
)托利斯先生()
在选择中引入一个临时变量怎么样
sOrderBy.Split(',').Select(x =>
{
var trimmedSplitted = x.Trim().Split(' ');
return new OrderByColumn()
{
ColumnName = trimmedSplitted[0].Trim(),
IsAscending = (trimmedSplitted[1].Trim() == "ASC")
};
}
).ToList<OrderByColumn>()
sOrderBy.Split(',')。选择(x=>
{
var trimmedSplitted=x.Trim().Split(“”);
返回新的OrderByColumn()
{
ColumnName=trimmedSplitted[0]。Trim(),
IsAscending=(trimmedSplitted[1]。Trim()=“ASC”)
};
}
)托利斯先生()
sOrderBy.Split(“,”)
.Select(csv=>csv.Trim().Split(“”))
.Select(splitBySpaces=>neworderbycolumn()
{
ColumnName=splitBySpaces[0]。Trim(),
IsAscending=(拆分空间[1]。Trim()=“ASC”)
})
托利斯先生()
sOrderBy.Split(“,”)
.Select(csv=>csv.Trim().Split(“”))
.Select(splitBySpaces=>neworderbycolumn()
{
ColumnName=splitBySpaces[0]。Trim(),
IsAscending=(拆分空间[1]。Trim()=“ASC”)
})
托利斯先生()
您只需添加一个提取选择:
sOrderBy.Split(',').
Select(x => x.Trim().Split(' ')).
Select(x => new OrderByColumn(){
ColumnName = x[0].Trim(),
IsAscending = x[1].Trim() == "ASC"}).
ToList()
我希望这对您有用。您只需添加一个摘录选择:
sOrderBy.Split(',').
Select(x => x.Trim().Split(' ')).
Select(x => new OrderByColumn(){
ColumnName = x[0].Trim(),
IsAscending = x[1].Trim() == "ASC"}).
ToList()
我希望这对你有帮助