簡體   English   中英

需要幫助的理解。選擇方法C#

[英]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>

TSelect具有兩個屬性( myIdentiaficationmyName )的匿名類型,因此OrderBy(i => i.Id)將不會編譯。 可以解決:

.OrderBy(i => i.myIdentiafication);

這是一個LINQ查詢。 Enumerable.Select 項目每行從文件與性能匿名對象myIdentiaficationmyName 然后,使用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返回的每個字符串中,創建一個具有兩個屬性( myIdentiaficiationmyName )的匿名對象。 在Select中,上下文變量l代表ReadLines返回的集合中的一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM