C#比较和提取来自2列表的数据<> [英] C# comparing and extracting data from 2 list<>

查看:64
本文介绍了C#比较和提取来自2列表的数据<>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法构建我的代码以执行我想要的操作。



目标是清除库存数据库并将其替换为仅具有计算机的计算机去年一直在使用



我正在比较2个计算机列表,一个来自Active Directory,另一个来自库存数据库。我已将表格列入List<>,我的想法是,Active Directory中的有效计算机列表将逐项检查整个库存清单,然后如果匹配,则信息两个列表中的内容将合并到第三个列表中。我没有得到那个结果



我的代码

  int  i =  0 ; 
foreach (MachineAD ADmachine in machinesAD)
{
foreach (机器机器中)
{
if (ADmachine.Name.Contains(machine.BarCode))
{
machinesUnified.Add( new MachineUnified() {IDad = ADmachine.ID,NameFromAD = ADmachine.Name,NameFromInventory = machine.BarCode});
Console.WriteLine(machinesUnified [i] .NameFromAD);
i ++;
}
}
}



输出摘录,(它是1700行与4500相比,产生这种模式):

 ... 033333 
033333
033333
033333
033333
033333
033333
033333
033333
033333
033333
033333
033333
033435
033435
033435
033435
033435
033435
033435
033435
033435
033435
033435
033435
033435
032673
032673
032673
032673
032673
032673
032673
032673
032673
032673
032673
032673
032673
034567
034567
034567
034567
034567
034567
034567
034567
034567
034567
034567
034567
034567 ...





我尝试过:



阅读文档,论坛帖子,列表交叉引用等文章等。

解决方案

如果我对您的代码进行虚拟设置和测试:

  public   class  MachineAD 
{
public string 名称;
public int ID;
}
public class 计算机
{
< span class =code-keyword> public string BarCode;
}
public class MachineUnified
{
< span class =code-keyword> public int IDad;
public string NameFromAD;
public string NameFromInventory;
}
私有 void myButton_Click( object sender,EventArgs e)
{
List< MachineAD> machinesAD = new 列表< MachineAD>();
machinesAD.Add( new MachineAD(){Name = M1,ID = 33333 });
machinesAD.Add( new MachineAD(){Name = M2,ID = 33435 });
machinesAD.Add( new MachineAD(){Name = M3,ID = 32673 });
List< Machine> machines = new List< Machine>();
machines.Add( new Machine(){BarCode = 1});
machines.Add( new Machine(){BarCode = 3});
列表< MachineUnified> machinesUnified = new List< MachineUnified>();
int i = 0 ;
foreach (MachineAD ADmachine in machinesAD)
{
foreach (机器机器中)
{
if (ADmachine.Name.Contains(machine.BarCode))
{
machinesUnified.Add( new MachineUnified() {IDad = ADmachine.ID,NameFromAD = ADmachine.Name,NameFromInventory = machine.BarCode});
Console.WriteLine(machinesUnified [i] .NameFromAD);
i ++;
}
}
}
}



然后我得到的是两行:

 33333,M1,1 
32673,M3,3

这是我所期望的。为了获得更多的行,我需要更改条形码,使其成为多个机器名称的子集:

 List< MachineAD> machinesAD =  new 列表< MachineAD>(); 
machinesAD.Add( new MachineAD(){Name = M1,ID = 33333 });
machinesAD.Add( new MachineAD(){Name = M2,ID = 33435 });
machinesAD.Add( new MachineAD(){Name = M3,ID = 32673 });
List< Machine> machines = new List< Machine>();
machines.Add( new Machine(){BarCode = M});
machines.Add( new Machine(){BarCode = 3});



然后我得到4行:

 33333,M1,M 
33435,M2,M
32673,M3,M
32673,M3,3

所以......我先看看您的数据,特别是BarCode字段中的内容 - 如果它们中的任何一个是奇数,那么它们可以匹配您的一些名称而不是一个,这将导致您的问题。


I'm having trouble structuring my code to do what I want.

The goal is to purge an inventory database and replace it with only the computers that have been in use the last year

I am comparing 2 lists of computers, one from Active Directory and one from an inventory database. I've made the tables into List<>'s, and my idea was that the "valid" list of computers in Active Directory, would be checked item by item against the entire inventory list, then if there was a match, information from both lists would be consolidated into a third list. I am not getting that result

My code

int i = 0;
foreach (MachineAD ADmachine in machinesAD)
{
    foreach (Machine machine in machines)
    {
        if (ADmachine.Name.Contains(machine.BarCode))
        {
            machinesUnified.Add(new MachineUnified() { IDad = ADmachine.ID, NameFromAD = ADmachine.Name, NameFromInventory = machine.BarCode });
            Console.WriteLine(machinesUnified[i].NameFromAD);
            i++;
        }
    }
}


Output excerpt, (it's 1700 lines compared with 4500, resulting in this pattern):

...033333
033333
033333
033333
033333
033333
033333
033333
033333
033333
033333
033333
033333
033435
033435
033435
033435
033435
033435
033435
033435
033435
033435
033435
033435
033435
032673
032673
032673
032673
032673
032673
032673
032673
032673
032673
032673
032673
032673
034567
034567
034567
034567
034567
034567
034567
034567
034567
034567
034567
034567
034567...



What I have tried:

Reading documentation, forum posts, articles on list cross-referencing etc. etc. etc.

解决方案

If I do a dummy setup and test on your code:

public class MachineAD
    {
    public string Name;
    public int ID;
    }
public class Machine
    {
    public string BarCode;
    }
public class MachineUnified
    {
    public int IDad;
    public string NameFromAD;
    public string NameFromInventory;
    }
private void myButton_Click(object sender, EventArgs e)
    {
    List<MachineAD> machinesAD = new List<MachineAD>();
    machinesAD.Add(new MachineAD() { Name = "M1", ID = 33333 });
    machinesAD.Add(new MachineAD() { Name = "M2", ID = 33435 });
    machinesAD.Add(new MachineAD() { Name = "M3", ID = 32673 });
    List<Machine> machines = new List<Machine>();
    machines.Add(new Machine() { BarCode = "1" });
    machines.Add(new Machine() { BarCode = "3" });
    List<MachineUnified> machinesUnified = new List<MachineUnified>();
    int i = 0;
    foreach (MachineAD ADmachine in machinesAD)
        {
        foreach (Machine machine in machines)
            {
            if (ADmachine.Name.Contains(machine.BarCode))
                {
                machinesUnified.Add(new MachineUnified() { IDad = ADmachine.ID, NameFromAD = ADmachine.Name, NameFromInventory = machine.BarCode });
                Console.WriteLine(machinesUnified[i].NameFromAD);
                i++;
                }
            }
        }
    }


Then what I get is two rows:

33333, M1, 1
32673, M3, 3

Which is what I would expect. To get more rows than that, I need to change the Barcode so it is a subset of several machine names:

List<MachineAD> machinesAD = new List<MachineAD>();
machinesAD.Add(new MachineAD() { Name = "M1", ID = 33333 });
machinesAD.Add(new MachineAD() { Name = "M2", ID = 33435 });
machinesAD.Add(new MachineAD() { Name = "M3", ID = 32673 });
List<Machine> machines = new List<Machine>();
machines.Add(new Machine() { BarCode = "M" });
machines.Add(new Machine() { BarCode = "3" });


Then I get 4 rows:

33333, M1, M
33435, M2, M
32673, M3, M
32673, M3, 3

So...I'd start by looking at your data and specifically what is in the BarCode field - if any of them are "odd" then they could match quite a few of your names instead of just one, which would cause your problem.


这篇关于C#比较和提取来自2列表的数据&lt;&gt;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆