Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从CSV查找_C#_Linq - Fatal编程技术网

C# 从CSV查找

C# 从CSV查找,c#,linq,C#,Linq,我有一个以下格式的CSV文件: "Call Type","Charge Type","Map to" "51","","Mobile SMS" "52","","Mobile SMS" "DD","Local Calls","Local Calls" "DD","National Calls","National Calls" 前两列是我的C#将插入的“源信息”,最后一列是它将返回的内容 目前我正在做的是用c#硬编码的switch语句 在哪里 我希望这是一个可扩展的列表,因此我的新方法是从cs

我有一个以下格式的CSV文件:

"Call Type","Charge Type","Map to"
"51","","Mobile SMS"
"52","","Mobile SMS"
"DD","Local Calls","Local Calls"
"DD","National Calls","National Calls"
前两列是我的C#将插入的“源信息”,最后一列是它将返回的内容

目前我正在做的是用c#硬编码的switch语句

在哪里

我希望这是一个可扩展的列表,因此我的新方法是从csv文件加载映射表。您能否建议对此方法进行任何改进,以使我的定义库可扩展(希望CSV文件可以用于此目的,到目前为止它只有100行,所以不关心内存管理)

到目前为止,我尝试的是:

    class ICD_Map2
    {
        private string call_type;
        private string charge_type;
        private string map_to;

        // Default constructor
        public ICD_Map2() {
            call_type = "Unknown";
            charge_type = "Unknown";
            map_to = "Unknown";
        }

        // Constructor 
        public ICD_Map2(string call_type, string charge_type, string map_to)
        {
            this.call_type = call_type;
            this.charge_type = charge_type;
            this.map_to = map_to;
        }

    }

    List<ICD_Map2>maps = new List<ICD_Map2>();



private void button2_Click(object sender, EventArgs e)
        {
            // Start new thread to create BillSummary.csv
            button1.Enabled = false;

            maps.Clear();
            //load mapping file
            var reader = new StreamReader(File.OpenRead(@"Itemised_Call_Details_Map.csv"));
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                var values = line.Split(',');

                maps.Add(new ICD_Map2(values[0].Replace("\"",""), values[1].Replace("\"",""), values[2].Replace("\"","")));
                textBox2.AppendText(Environment.NewLine + " Mapping: " + values[0].Replace("\"", "") + " to " + values[1].Replace("\"", ""));
            }
class-ICD\u-Map2
{
私有字符串调用类型;
私有字符串电荷类型;
私有字符串映射到;
//默认构造函数
公共ICD_地图2(){
调用\u type=“未知”;
费用类型=“未知”;
映射到=“未知”;
}
//建造师
公共ICD映射2(字符串调用类型、字符串费用类型、字符串映射到)
{
this.call\u type=call\u type;
this.charge\u type=charge\u type;
this.map\u to=map\u to;
}
}
Listmaps=新列表();
私有无效按钮2\u单击(对象发送者,事件参数e)
{
//启动新线程以创建BillSummary.csv
按钮1.启用=错误;
maps.Clear();
//加载映射文件
var reader=new StreamReader(File.OpenRead(@“逐项调用详细信息”Map.csv));
而(!reader.EndOfStream)
{
var line=reader.ReadLine();
var值=行分割(',');
添加(新ICD\U Map2(值[0]。替换(“\”,”),值[1]。替换(“\”,”),值[2]。替换(“\”,”));
textBox2.AppendText(Environment.NewLine+“映射:”+值[0]。将(“\”,“)+”替换为“+值[1]。替换(“\”,”);
}
我已经将CSV文件加载到我的程序中,但是我无法从LINQ进行查找。你能告诉我下一个过程吗

对任何其他方法开放


谢谢你的时间。

我建议你和我一起去

它将给您很大的灵活性来处理您的代码


我们一直在我们的项目中使用它,完全控制编写容易出错和bug的通用CSV代码真的很有帮助

我认为描述您的最终目标是有益的。根据您寻找的内容,可以提出许多建议。我想我的困惑来自于有足够的数据将重复的调用类型映射到不同的费用类型。@KreepN我正在尝试创建一个函数,该函数将接受两个变量,将其与CSV中的前两列匹配,如果100%匹配,则返回CSV中的第三列。我理解这一点,并且您已经在顶部提供了CSV映射文件。您的最终结果是什么,一个表示数据的对象集合?一个包含结果的文件?(了解bill_文件也是很有帮助的))@KreepN我将根据:映射CSV和我尝试映射的bill生成另一个CSV文件
l[5] = "51";
l[3] = "";



 private static string ICD_map(string call_type_description, string call_category,)
        {
              case "51":
              case "52":
                  return "Mobile SMS";
               default:
                    return "Unknown";
}
    class ICD_Map2
    {
        private string call_type;
        private string charge_type;
        private string map_to;

        // Default constructor
        public ICD_Map2() {
            call_type = "Unknown";
            charge_type = "Unknown";
            map_to = "Unknown";
        }

        // Constructor 
        public ICD_Map2(string call_type, string charge_type, string map_to)
        {
            this.call_type = call_type;
            this.charge_type = charge_type;
            this.map_to = map_to;
        }

    }

    List<ICD_Map2>maps = new List<ICD_Map2>();



private void button2_Click(object sender, EventArgs e)
        {
            // Start new thread to create BillSummary.csv
            button1.Enabled = false;

            maps.Clear();
            //load mapping file
            var reader = new StreamReader(File.OpenRead(@"Itemised_Call_Details_Map.csv"));
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                var values = line.Split(',');

                maps.Add(new ICD_Map2(values[0].Replace("\"",""), values[1].Replace("\"",""), values[2].Replace("\"","")));
                textBox2.AppendText(Environment.NewLine + " Mapping: " + values[0].Replace("\"", "") + " to " + values[1].Replace("\"", ""));
            }