[英]Need help understanding .Select method C#
我很難理解這是什么類型的語句以及如何使用.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
函數創建一個匿名類型 (也利用泛型類型推斷),並基於拆分每行l
(這是您可枚舉的string
)來分配一些屬性。
OrderBy
是另一個IEnumerable<T>
擴展方法,它根據您提供的表達式按順序返回IEnumerable<T>
。
T
是Select
具有兩個屬性( myIdentiafication
和myName
)的匿名類型,因此OrderBy(i => i.Id)
位將不會編譯。 可以解決:
.OrderBy(i => i.myIdentiafication);
這是一個LINQ查詢。 Enumerable.Select
項目每行從文件與性能匿名對象myIdentiafication
和myName
。 然后,使用Enumerable.OrderBy
對匿名對象的序列進行排序。 但是您應該選擇匿名對象中存在的屬性。 例如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
)的匿名對象。 在Select中,上下文變量l
代表ReadLines
返回的集合中的一行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.