需要帮助理解.选择方法 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);

任何帮助不胜感激!

需要帮助理解.选择方法 C#

Enumerable.Select 方法是IEnumerable<T>类型的扩展方法。它需要一个Func<TSource, TResult>,允许您接收IEnumerable<T>项并将它们投影到其他内容,例如类型的属性或新类型。它大量使用编译器的泛型类型推断来执行此操作,而无需到处<>

在您的示例中,IEnumerable<T>是文件中行的string[]Select func 创建一个匿名类型(也使用泛型类型推断(,并根据将每一行拆分l来分配一些属性,这是枚举的string

OrderBy 是另一种IEnumerable<T>扩展方法,它继续根据您提供的表达式按顺序返回IEnumerable<T>

此时T是具有两个属性(myIdentiaficationmyName(的Select的匿名类型,因此OrderBy(i => i.Id)不会编译。它可以修复:

.OrderBy(i => i.myIdentiafication);
这是一个

LINQ 查询。 Enumerable.Select将文件中的每一行投影到具有属性 myIdentiaficationmyName 的匿名对象中。然后,使用 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创建一个具有两个属性(myIdentiaficiationmyName (的匿名对象。在"选择上下文变量"中,l表示 ReadLines 返回的集合中的一行。