表到词典<;字符串,对象>;使用Lambda表达式

本文关键字:gt 对象 使用 Lambda 表达式 字符串 lt | 更新日期: 2023-09-27 18:23:56

我正在尝试将数据表转换为包含字符串和对象的字典,对象通过方法返回

public class myObj
    {
        public string Sid { get; set; }
        public string Serial { get; set; }
        public Double RunTime { get; set; }
        public string Username { get; set; }
        public string LogonTime { get; set; }
        public string SqlText { get; set; }
        public string Database { get; set; }
        public bool Terminated { get; set; }
        public myObj Obj(DataRow row)
        {
            myObj Session = new myObj();
            myObj.Sid = row["SID"].ToString();
            myObj.Serial = row["SERIAL#"].ToString();
            myObj.Username = row["USERNAME"].ToString();
            myObj.RunTime = Convert.ToDouble(row["RUN_TIME"].ToString());
            myObj.LogonTime = row["LOGON_TIME"].ToString();
            myObj.SqlText =  row["SQL_FULLTEXT"].ToString();
            myObj.Database = row["DATABASE"].ToString();
            return Session ;
        }
    }

Dictionary<string, Dictionary<string,myObj >> result = table.AsEnumerable().ToDictionary(row => row["USERNAME"].ToString() + "|" + row["SQL_FULLTEXT"].ToString(), row =>(这里我需要引用Obj(Datarow row)方法,并传递该行以获得返回的对象,以便拥有一个带有的字典

我想通过Lambda表达式来实现这一点。我能够通过使用Dictionary循环来完成这项工作。添加

表到词典<;字符串,对象>;使用Lambda表达式

您可以使用Dictionary.Add来完成此操作,但不能使用ToDictionary。原因是ToDictionary确实允许您更改。在您的情况下,指定键选择器函数'row=>row["USERNAME"].ToString()+"|"+row["SQL_FULLTEXT"].ToString()',但它确实不允许您更改底层可枚举类型

您只能使用ToDictionary()创建dictionary <T, DataRow>类型的字典(假设表的类型为DataTable);

public class myObj
    {
        public string Sid { get; set; }
        public string Serial { get; set; }
        public Double RunTime { get; set; }
        public string Username { get; set; }
        public string LogonTime { get; set; }
        public string SqlText { get; set; }
        public string Database { get; set; }
        public bool Terminated { get; set; }
        public myObj()
        {
        }
        public myObj(DataRow row)
        {
            myObj Session = new myObj();
            myObj.Sid = row["SID"].ToString();
            myObj.Serial = row["SERIAL#"].ToString();
            myObj.Username = row["USERNAME"].ToString();
            myObj.RunTime = Convert.ToDouble(row["RUN_TIME"].ToString());
            myObj.LogonTime = row["LOGON_TIME"].ToString();
            myObj.SqlText =  row["SQL_FULLTEXT"].ToString();
            myObj.Database = row["DATABASE"].ToString();
            return Session ;
        }
    }
    Dictionary<myObj,string > result =
                    table.AsEnumerable()
                        .ToDictionary(
                            row => new myObj(row), row => row["USERNAME"].ToString() + "|" + row["SQL_FULLTEXT"].ToString());