如果我有这样的二维字符串数组;
{
{"12", "Animal", "Cat"}
{"20", "Animal", "Dog"}
{"6", "Vegetable", "Carrot"}
{"5", "Mineral", "Iron"}
}
如何使用 LINQ 来选择数据和排序,比如第二个“列”?(最好是 C# linq)
就像是:
var sorted = array.OrderBy(x => x[1])
.ToArray(); // Or ToList, or nothing...
目前尚不清楚“选择数据”是什么意思。就个人而言,我会尝试创建一个更强类型的数据模型,而不仅仅是为每一行设置一个字符串数组。当然,您也可以使用 LINQ 轻松做到这一点:
var sorted = array.Select(row => new Item {
Id = int.Parse(row[0]),
Category = row[1],
Name = row[2]
});
.OrderBy(x => x.Category)
.ToArray();
编辑:对于第一个查询表达式版本:
var sorted = (from x in array
orderby x[1]
select x).ToArray();
如您所见,它比直接使用扩展方法更混乱。两种形式都值得适应,因此您可以在任何给定情况下选择最简单的一种。
即使它只是数据的临时存储,我也会使用匿名类型来使代码更清晰,除非所需的最终结果是排序的字符串数据(即,如果您的任务是对文本文件进行排序)。
假设您有 astring[][]
而不是string[,]
,我会这样做:
var query = from row in array
let record = new { ID = int.Parse(row[0]), Category = row[1], Name = row[2] }
orderby record.Category
select record;
var sortedData = query.ToArray();
扩展方法语法:
var sortedData = array
.Select(row => new { ID = int.Parse(row[0]), Category = row[1], Name = row[2] })
.OrderBy(record => record.Category)
.ToArray();