如何解决尝试正确设置 2 个 csv 文件匹配的查询卡住了
以下是每个 csv 上的数据外观示例。
inventory.csv
ID,payment,Receipt#
90006,VISA,jk73kl_
90006,null
inventory.csv
INFO,VIEWS,DATE
9006_Produce_Banana_jk73kl__,10-13-20
9006_Produce_Banana,10-13-20
我的位置有问题,我需要搜索两个表格,如果有匹配的收据编号,将它们拉出并合并两行。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static void Main()
{
string[] ourDataSheet = System.IO.File.ReadAllLines(@"../../OurData.csv");
string[] theirDataSheet = System.IO.File.ReadAllLines(@"../../TheirData.csv");
string ourDataHeaders = ourDataSheet[0];
string theirDataHeaders = theirDataSheet[0];
IEnumerable<string> TrackingQuery =
from ourData in ourDataSheet
let ourdatafields = ourData.Split(',')
from theirData in theirDataSheet
let theirdatafields = theirData.Split(',')
where theirdatafields[0].EndsWith(ourdatafields[2])
select ourdatafields[0] + "," + ourdatafields[1] + "," + ourdatafields[2] + "," + theirdatafields[0] + "," + theirdatafields[1] + "," + theirdatafields[2] + "," + theirdatafields[3];
OutPutResults(TrackingQuery);
Console.ReadKey();
}
static void OutPutResults(IEnumerable<string> query)
{
foreach(string item in query)
{
Console.WriteLine(item);
Console.Read();
}
}
}
}
解决方法
首先,我建议您使用像 CsvHelper 这样的第三方软件包并执行以下操作
public class Sale
{
public int ID { get; set; }
public string Payment { get; set; }
[Name("Recipt#")]
public string Recipt { get; set; }
}
public class Inventory
{
public string INFO { get; set; }
public string VIEWS { get; set; }
public string DATE { get; set; }
}
IEnumerable<Sale> sales;
IEnumerable<Inventory> inventory;
using (var reader = new StreamReader(@"../../OurData.csv"))
using (var csv = new CsvReader(reader,CultureInfo.InvariantCulture))
{
sales = csv.GetRecords<Sale>();
}
using (var reader = new StreamReader(@"../../TheirData.csv"))
using (var csv = new CsvReader(reader,CultureInfo.InvariantCulture))
{
inventory = csv.GetRecords<Inventory>();
}
var results = sales.Where(s => inventory.Any(i => i.INFO.EndsWith(s.Recipt)));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。