代码之家  ›  专栏  ›  技术社区  ›  pkrzysiek

只有第一个LINQ。Count()语句有效

  •  0
  • pkrzysiek  · 技术社区  · 1 年前

    我试着从cvs文件中获取数据,一切都很顺利,但我不能在上面使用LINQ,第一条语句总是有效的,但其他语句总是返回0

    CVS标题:car_make、car_mode、car_model_year、car_vin

    public static void Main(string[] args)
    {
        using (var reader = new StreamReader("D:\\C#\\CSV_Deserialization\\obj\\Debug\\net7.0\\Cars1.csv"))
        using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
        {
            //csv.Context.RegisterClassMap<MyCarMap>();
            var records = csv.GetRecords<Cars>();
               
            int HondaCounter = records.Count(car => car.CarMake == "Honda");
            int ChevroletCounter = records.Count(car => car.CarMake == "Chevrolet");
            int PontiacCounter = records.Count(car => car.CarMake == "Pontiac");
    
            Console.WriteLine(HondaCounter);
            Console.WriteLine(ChevroletCounter);
            Console.WriteLine(PontiacCounter);
              
        }
    }
    
    namespace CSV_Deserialization
    {
        public class Cars
        {
            [Name("car_make")]
            public string CarMake { get; set;}
            [Name("car_model")]
            public string CarModel { get; set; }
            [Name("car_model_year")]
            public int CarModelYear { get; set; }
            [Name("car_vin")]
            public string CarVin {  get; set; }
    
        }
    }
    
    
    namespace CSV_Deserialization
    {
        public class MyCarMap :ClassMap<Cars>
        {
            public MyCarMap()
            {
                Map(m => m.CarMake).Name("car_make");
                Map(m => m.CarModel).Name("car_model");
                Map(m => m.CarModelYear).Name("car_model_year");
                Map(m => m.CarVin).Name("car_vin");
            }
           
        }
    }
    

    它不适用于Map或Indexes

    我已经尝试更改csv、索引并进行了检查

    1 回复  |  直到 1 年前
        1
  •  3
  •   Anderson Pimentel    1 年前

    只需添加 .ToArray() .ToList() 之后 .GetRecords<Cars>() :

    var records = csv.GetRecords<Cars>().ToArray();
    

    这个 GetRecords<T> 方法将返回 IEnumerable<T> 。它一直在读记录,直到第一天结束 Count() 调用,并在第二次和第三次调用时一直指向末尾。这就是为什么它只对第一个返回正确的计数。

    通过呼叫 ToArray ToList ,我们是 物化 记录。