C# 匹配算法

C# 匹配算法,c#,sql,sql-server,C#,Sql,Sql Server,我不确定如何从IEnum对象获取数据并将其转储到字典和/或列表中,并希望得到任何指导。 我正在开发一个程序,该程序通过从SQL DB提取的数据集合进行排序。我正在使用企业库5(数据访问应用程序块)。到目前为止,有一个适配器类将创建数据库实例,将查询结果映射到适当的字段(即:First、middle、last names、DoB和ID),它有两个类型为IEnumerable的方法将传递SQL语句。我不确定返回的IEnum对象是什么样子的。一种方法将返回违规者列表,另一种方法将返回基于DoB的所有记

我不确定如何从IEnum对象获取数据并将其转储到字典和/或列表中,并希望得到任何指导。 我正在开发一个程序,该程序通过从SQL DB提取的数据集合进行排序。我正在使用企业库5(数据访问应用程序块)。到目前为止,有一个适配器类将创建数据库实例,将查询结果映射到适当的字段(即:First、middle、last names、DoB和ID),它有两个类型为IEnumerable的方法将传递SQL语句。我不确定返回的IEnum对象是什么样子的。一种方法将返回违规者列表,另一种方法将返回基于DoB的所有记录列表:

public IEnumerable<Person> GetOffenders()
{   
var people =
            _db.ExecuteSqlStringAccessor<Person>(@"SELECT pm.Local_ID, pm.First_Name, pm.Last_Name, pm.Middle_Name, pm.DOB 
                    FROM Person_Main pm ", _personRowMapper);

        return people;
public IEnumerable getEncriters()
{   
瓦尔人=
_db.ExecuteSqlStringAccessor(@“选择pm.Local_ID、pm.First_Name、pm.Last_Name、pm.Middle_Name、pm.DOB
来自个人(主pm),(个人绘图员);
还人,;
}

在另一个包含匹配逻辑的类中,我试图“转储”适配器类中定义的getIncorners()的内容,其思想是迭代两个列表(Incorners和基于DoB的所有记录)。我假设一个好的方法是使用字典来保存getIncorners()的结果。到目前为止,我已经得到了这个测试代码,它只检查连接到DB是否成功,并检索我输入的一行伪数据:

    PersonAdapter personAdapter = new PersonAdapter();
    private Dictionary<String, List<Person>> testDictionary = new Dictionary<String, List<Person>>();

    public void Test1()
    {
        var offenders = personAdapter.GetOffenders();
        var pList = new List<Person>();
        // Test to see if GetOffenders is returning data correctly
        foreach (var variable in offenders)
        {
            var fName = variable.FirstName;
            var mName = variable.MiddleName;
            var lName = variable.LastName;
            var lId = variable.LocalId;

            Console.WriteLine(variable.FirstName + " " + variable.MiddleName + " " +
                     variable.LastName + " " + variable.LocalId);
            Console.ReadLine();
        }
PersonAdapter PersonAdapter=newpersonadapter();
私有字典testDictionary=新字典();
公共void Test1()
{
var investors=personAdapter.getinvestors();
var pList=新列表();
//测试以查看GetInjector是否正确返回数据
foreach(风险值中的变量)
{
var fName=variable.FirstName;
var mName=variable.MiddleName;
var lName=variable.LastName;
var lId=variable.LocalId;
Console.WriteLine(variable.FirstName+“”+variable.MiddleName+“”)+
variable.LastName+“”+variable.LocalId);
Console.ReadLine();
}

一个
IEnumerable
实现一次只返回一个项。如果您想将这些项转移到一个静态集合,您需要循环遍历
IEnumerable
集合,然后执行一个
列表。添加(项)

然后,您可以使用
pList
集合作为正常的
列表
,然后添加到
testDictionary
字段中

testDictionary.Add("some_string_key", pList);

您的调试器显示了什么?可能我遗漏了什么。从
getInversors()返回的错误内容是什么
?如果列表中至少有一项,foreach只会在列表中迭代。这与手头的问题无关,但是为什么您要将返回记录的值转储到不同的变量中,然后不在您的
WriteLine
中使用它们?不清楚您试图在这里实现什么。您能提供更多详细信息吗l关于您需要的“匹配”算法,也许还有示例输入和输出?如果您发布的代码显示了您真正想要做的事情(在需要帮助的地方添加注释),这也会很有帮助而不是你真正想要完成的伪代码。@gmiley方法本身没有任何问题。我很难理解方法返回的工作原理(IEnumerable)…我可以看出它返回了适当的值,但我希望将这些值传递到字典,而不是简单地调用console.writeLine
testDictionary.Add("some_string_key", pList);