需要帮助理解.选择方法 C#
本文关键字:选择 方法 助理 帮助 | 更新日期: 2023-09-27 17:50:00
我很难理解这是什么类型的语句以及如何使用 .select 方法。
var lines = System.IO.File.ReadLines(@"c:'temp'mycsvfil3.csv")
.Select(l => new
{
myIdentiafication= int.Parse(l.Split(',')[0].Trim()),
myName= l.Split(',')[1].Trim()
}
).OrderBy(i => i.Id);
任何帮助不胜感激!
Enumerable.Select
方法是IEnumerable<T>
类型的扩展方法。它需要一个Func<TSource, TResult>
,允许您接收IEnumerable<T>
项并将它们投影到其他内容,例如类型的属性或新类型。它大量使用编译器的泛型类型推断来执行此操作,而无需到处<>
。
在您的示例中,IEnumerable<T>
是文件中行的string[]
。Select
func 创建一个匿名类型(也使用泛型类型推断(,并根据将每一行拆分l
来分配一些属性,这是枚举的string
。
OrderBy
是另一种IEnumerable<T>
扩展方法,它继续根据您提供的表达式按顺序返回IEnumerable<T>
。
此时T
是具有两个属性(myIdentiafication
和myName
(的Select
的匿名类型,因此OrderBy(i => i.Id)
位不会编译。它可以修复:
.OrderBy(i => i.myIdentiafication);
LINQ 查询。 Enumerable.Select
将文件中的每一行投影到具有属性 myIdentiafication
和 myName
的匿名对象中。然后,使用 Enumerable.OrderBy
对匿名对象的序列进行排序。但是您应该选择存在于匿名对象中的属性。F.D. myIdentiafication
因为没有id
属性:
var lines = File.ReadLines(@"c:'temp'mycsvfil3.csv") // get sequence of lines
.Select(l => new {
myIdentiafication = int.Parse(l.Split(',')[0].Trim()),
myName= l.Split(',')[1].Trim()
}).OrderBy(i => i.myIdentiafication);
注意:为避免每行解析两次,您可以使用查询语法引入新的范围变量:
var lines = from l in File.ReadLines(@"c:'temp'mycsvfil3.csv")
let pair = l.Split(',')
let id = Int32.Parse(pair[0].Trim())
orderby id
select new {
Id = id,
Name = pair[1].Trim()
};
从 返回的每个字符串中ReadLines
创建一个具有两个属性(myIdentiaficiation
和 myName
(的匿名对象。在"选择上下文变量"中,l
表示 ReadLines
返回的集合中的一行。