【问题标题】:Table To Dictionary <String,Object> using Lambda Expression表到字典 <String,Object> 使用 Lambda 表达式
【发布时间】:2016-02-25 21:49:05
【问题描述】:

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

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&lt;string, Dictionary&lt;string,myObj &gt;&gt; result = table.AsEnumerable().ToDictionary(row =&gt; row["USERNAME"].ToString() + "|" + row["SQL_FULLTEXT"].ToString(), row =&gt;(这里我需要引用 Obj(Datarow row) 方法并传递行来获取返回的对象,以便有一个字典与

我想通过 Lambda 表达式来做到这一点。我能够通过使用 Dictionary.Add 循环来做到这一点

【问题讨论】:

  • 为什么 Obj() 方法不是静态的和/或只是构造方法?也不确定您发布的语法。我看不出它是如何编译的,因为您在 myObj 而不是 Session 上设置属性。
  • 您的回答帮助我解决了我的问题。

标签: c# dictionary lambda


【解决方案1】:

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

您只能使用 ToDictionary() 创建 Dictionary&lt;T, DataRow&gt; 类型的字典(假设表是 DataTable 类型);

【讨论】:

  • 我能够根据 stephen.vakil 对我的问题的回答来实施解决方案。请在下面查看我的答案。我对其进行了测试,它确实有效。
  • 您询问了有关创建 Dictionary> 而不是 Dictionary 的问题。但我很高兴听到您解决了问题。
【解决方案2】:
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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多