c# - 如何在 LINQ 中比较两个匿名变量列表

标签 c# linq parsing linqpad

Link to csv file

我有以下代码,用于过滤 csv 文件并将第 1 列和第 5 列存储在一个列表(值)中,将第 7 列和第 11 列存储在另一个列表(值1)中。

目的是搜索第一个列表(值)中的每个元素,然后检查第二个列表(值 1)中的每个元素是否有匹配的期间,然后添加所有匹配案例的支出,然后与第一个列表的支出进行比较1% 的误差范围。

以下代码负责使用下面的两个 foreach 循环来搜索每个列表部分。但我在定义变量时遇到问题(即 var temp 不起作用,并给我一个 FormatException 错误:输入字符串的格式不正确。”运行代码时出现错误)以将支出存储或添加到一起事件是第二个列表中多次出现某个句点。

当我定义列表时,是否可以定义变量 Payout 和 period 的类型?问题在于它们是定义变量的匿名变量。

感谢任何帮助,谢谢。

var values = File.ReadLines(path).Skip(1)
      .Select(x => x.Split(','))
      .Where(x => x[0] != string.Empty)
      .Select(x => new { Period = int.Parse(x[0]), Payout = decimal.Parse(x[4]) })
      .ToList();

values = values.OrderBy(x => x.Period)
.ToList();

var values1 = File.ReadLines(path).Skip(1)
      .Select(x => x.Split(','))
      .Where(x => x[0] == string.Empty)
      .Select(x => new { Period = int.Parse(x[6]), Payout = decimal.Parse(x[10]) })
      .ToList();
//Console.WriteLine(values1);

values1 = values1.OrderBy(x => x.Period)
.ToList();
//Console.WriteLine(values1[0]);

decimal temp = 0;

foreach (var value in values)
{
    foreach (var value1 in values1)
    {
        if (value.Period == value1.Period)
        {
            temp += value1.Payout;
        }
    }
}

最佳答案

FormatException 意味着您的某些数据不是您所期望的。

您可以使用类似以下内容来检查无效数据。

   int dummyPeriod ;
   decimal dummyPayout;

   var badValues = File.ReadLines(path).Skip(1)
     .Select(x => x.Split(','))
     .Where(x => !Int32.TryParse(x[0], out dummyPeriod) || 
              !Decimal.TryParse(x[4], out dummyPayout))

     .Select(x => new { Period =  x[0] , Payout = x[4]   })
     .ToList();

如果您只想忽略这些行,您可以反转选择,例如

var values = File.ReadLines(path).Skip(1)
  .Select(x => x.Split(','))
  .Where(x => Int32.TryParse(x[0], out dummyPeriod) && 
              Decimal.TryParse(x[4], out dummyPayout))    
  .Select(x => new { Period = int.Parse(x[0]), Payout = decimal.Parse(x[4]) })
  .ToList();

请注意

 decimal.parse(x[4]) 

如果 x[4] 是空字符串,则会失败,而您可能希望将其解释为零。

关于c# - 如何在 LINQ 中比较两个匿名变量列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22476610/

相关文章:

c# - 在 C# 中使用和解析文本文件来初始化基于组件的游戏模型

c# - 这是其中一个循环引用吗?

c# - 是否可以在 wpf 中使用 silverlight 引用?

C# 使用 Linq 填充 TreeView

java - YAGO 本体无法被 OWL API 解析

php - 如何调用从 PHP 传递变量的 Javascript

c# - 为什么此 LINQ 语句会引发超时错误?

c# - 无法将 'System.__ComObject' 转换为 'System.Web.UI.WebControls.ListItem

asp.net - 是否可以在 GridView (ASP.NET) 上执行 linq 查询?

c# - Entity Framework 4.1 Linq Contains 和 StartsWith