我有一个以逗号分隔的字符串,表示对象和空格,表示这些对象的属性:
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&amp; 1数组值存在)。
有没有办法删除这种冗余?以某种方式将x.Trim().Split(' ')
的结果传递给匿名函数,然后从那里返回一个OrderByColumn
对象?
我知道我可以使用两个for / foreach循环来解决这个问题,但linq和lambdas非常酷! :-)
答案 0 :(得分:11)
如何在Select
:
sOrderBy.Split(',').Select(x =>
{
var trimmedSplitted = x.Trim().Split(' ');
return new OrderByColumn()
{
ColumnName = trimmedSplitted[0].Trim(),
IsAscending = (trimmedSplitted[1].Trim() == "ASC")
};
}
).ToList<OrderByColumn>()
答案 1 :(得分:4)
sOrderBy.Split(',')
.Select(csv=> csv.Trim().Split(' '))
.Select(splitBySpaces => new OrderByColumn()
{
ColumnName = splitBySpaces[0].Trim(),
IsAscending = (splitBySpaces[1].Trim() == "ASC")
})
.ToList<OrderByColumn>()
答案 2 :(得分:0)
您只需添加提取选择:
sOrderBy.Split(',').
Select(x => x.Trim().Split(' ')).
Select(x => new OrderByColumn(){
ColumnName = x[0].Trim(),
IsAscending = x[1].Trim() == "ASC"}).
ToList()
我希望这对你有用。