使用LINQ查询列表

我们的香蕉人

我从使用StreamReader.ReadLine入字符串列表的文本文件中得到了一个类似于以下的列表:

CSAclsEN    001 \\sgprt\Projects2   001 CSAclsEN-2010-1130227   10:42   27Feb13 2010    Southgate Branch    SS01    001 ****69  Steve Suttill   
01  ******10    Business Current Account    GBP 2,342,188.38    
02  27Feb13 Cheque Cashed   700.00- 
02  27Feb13 Cheque Cashed   25.00-  
02  27Feb13 Cheque Cashed   1,000.00-   
02  27Feb13 Cheque Cashed   1,000.00-   
02  27Feb13 CHS 4123-690069-100 20.00-  
01  ******11    Personal Current Account    GBP 22,456.80   
02  27Feb13 Cash Withdrawn  100.00- 
02  27Feb13 TFR 130227SS0100103 1,000.00    
02  27Feb13 TFR 130227SS0100091 1,234.56    
02  27Feb13 TFR 130227SS0100066 2,222.22    
02  27Feb13 TFR 130227SS0100064 0.01    

我想做的是:

  1. 输出第一行一次作为迷你语句头
  2. 每当一行中的前两个字符为01时,我都会输出该帐户的标头信息
  3. 然后是带有02行的格式化列表,直到带有01的下一行,我将再次输出标题信息,依此类推。

(这适用于收银员应用程序中的客户迷你对帐单)

我正在使用Office.Interop将其写入MS Word模板

LINQ是分离不同类型的记录的最佳方法吗,我将如何做?

输出(在MS Word模板中)将是这样-但没有边界

在此处输入图片说明

该模板只有前两个第二个表在Date下仅以一行开始,并且会有可变数量的帐户(以02开头),因此每次代码遇到02时,您看到的第二个表图片中的图片将被复制,或者为新表格添加相同的列,并为每行添加一行01

模板一开始看起来像这样: 在此处输入图片说明

并且,每遇到带有01的行,就会在下面添加一个新行,然后当遇到带有02的行时,将启动一个新表。

详细信息:这是对现有应用程序的增强,该应用程序已经处理了类似的列表,但只有一个帐户进行交易。

目前,我通过映射字典中的键/值对用数据替换“ {}”字段,然后开始像这样处理事务:

int iRow=1;

for (int s = 1; s < pqRequests.Count; s++)
    {                                                                              
    string[] sValues = pqRequests[s].Split('\t');

    // Transaction List
    for (int iDx = 2; iDx <= 5; iDx++)
        {
        oWordDoc.Tables[2].Cell(iRow, iDx).Range.Text = sValues[iDx - 1];
        }
    }

    oWordDoc.Tables[2].Rows.Add(ref oMissing);                                            
    iRow++;
    }

现在,我想在相同的过程中处理“帐户列表”迷你对帐单,但是不确定继续前进的最佳方法

西里尔·甘登

我认为LINQ在这里不是最易读的选项。
只需使用经典循环将提高可维护性:

var groupResults = new List<Tuple<string, List<string>>>();
List<string> subLines = null;
foreach(var line in lines)
{
    if(line.StartsWith("01"))
    {
        subLines = new List<string>();
        groupResults.Add(Tuple.Create(line, subLines));
    }
    // consider to handle the case where a line begin with 02 with no 01 before
    else if(subLines != null && line.StartsWith("02"))
    {
        subLines.Add(line);
    }
}

您得到的结果按标题分组,并带有对应的02列表。
您现在可以轻松地基于列表列表进行格式化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用LINQ进行IEnumerable项目列表的IN查询

来自分类Dev

如何使用ViewModels从LINQ查询返回列表

来自分类Dev

使用linq查询从列表中进行过滤

来自分类Dev

LINQ查询:使用Any检索列表

来自分类Dev

OrderBy列表LINQ查询

来自分类Dev

使用TimeSpan转换LINQ查询时出错?到列表<>?

来自分类Dev

使用linq查询加入两个列表-C#

来自分类Dev

如何使用存储字典的Linq查询数组列表

来自分类Dev

在LINQ查询中的模型值中使用列表

来自分类Dev

无法使用“ IN”列表形成正确的Linq查询

来自分类Dev

Linq查询Blob列表,内存使用情况

来自分类Dev

使用TimeSpan转换LINQ查询时出错?到列表<>?

来自分类Dev

使用下拉列表中的值的 LINQ 查询与数据进行比较

来自分类Dev

如何使用 linq 查询带有嵌套列表的对象?

来自分类Dev

LINQ查询记录中的列表

来自分类Dev

访问Linq查询的基本列表

来自分类Dev

Linq对子类列表的查询

来自分类Dev

动态Linq查询包含列表

来自分类Dev

动态linq查询遍历列表

来自分类Dev

LINQ 查询以加入列表

来自分类Dev

Linq查询包含对象列表的对象列表

来自分类Dev

在linq-to-sql查询中应该使用什么集合?可查询vs可枚举vs列表

来自分类Dev

使用LINQ查询带DTO列表查询数据库的问题

来自分类Dev

使用LINQ查询带DTO列表查询数据库的问题

来自分类Dev

使用LINQ查询从当前列表中获取包含任何数值的新列表

来自分类Dev

我可以使用LINQ查询两个列表以填充单个列表吗

来自分类Dev

使用||的Linq搜索查询

来自分类Dev

使用GroupBy的Linq查询

来自分类Dev

使用Foreach的Linq查询