zoukankan      html  css  js  c++  java
  • 使用linq对ado.net查询出来dataset集合转换成对象(查询出来的数据结构为一对多)

     public async Task<IEnumerable<QuestionAllInfo>> GetAllQuestionByTypeIdAsync(int id)
            {
                string sql = "SELECT q.Id as questionId,i.Id as instanceId,q.name as questionName,q.Intention as questionIntention,i.`Name` as instancesName FROM `t_questions` q LEFT JOIN t_instances i on q.Id = i.QuestionId WHERE q.QuestionTypeId = @p1";
                MySqlParameter[] mySqlParameters = new MySqlParameter[] { new MySqlParameter { MySqlDbType = MySqlDbType.Int32, Value = id, ParameterName = "@p1" } };
                var dataSet = await SQLHelp.ExecuteQueryAsync(sql, mySqlParameters);
                var table = dataSet.Tables[0];
                List<Temp> temps = new List<Temp>();
                if (table.Rows.Count <= 0)
                {
                    return null;
                }
                foreach (DataRow row in table.Rows)
                {
                    temps.Add(new Temp
                    {
                        QuestionId = (int)row["questionId"],
                        QuestionIntention = row["questionIntention"].ToString(),
                        QuestionName = row["questionName"].ToString(),
                        InstanceId = IsIntDBNULL(row["instanceId"]),
                        InstanceName = row["instancesName"].ToString()
                    }); ;
                }
                var result = temps.GroupBy(t => new { t.QuestionId, t.QuestionIntention, t.QuestionName })
                      .Select(question =>
                  new QuestionAllInfo
                  {
                      QuestionId = question.Key.QuestionId,
                      QuestionName = question.Key.QuestionName,
                      QuestionIntention = question.Key.QuestionIntention,
                      Instances = question.Select(q => new Instance
                      {
                          Id = q.InstanceId,
                          Name = q.InstanceName,
                          QuestionId = q.QuestionId
                      })
                  });
                return result;
            }

    要转换成的实体对象

    class Temp
        {
            public int QuestionId { get; set; }
            public string QuestionIntention { get; set; }
            public string QuestionName { get; set; }
            public int? InstanceId { get; set; }
            public string InstanceName { get; set; }
        }
    
    
     public class QuestionAllInfo
        {
            public int QuestionId { get; set; }
            public string QuestionIntention { get; set; }
            public string QuestionName { get; set; }
            public IEnumerable<Instance> Instances { get; set; }
        }
    
     public class Instance 
        {
            public int Id { get; set; }
            public string Name { get; set; }      
            public int QuestionId { get; set; }
        }
  • 相关阅读:
    Java并发编程
    详细分析Java中断机制[转]
    JAVA多线程面试题
    读书就读经典,经典技术书大全
    Linux top命令
    博客园博客修改模板的CSS
    Redis工业生产应用场景
    Redis作者谈Redis应用场景
    服务器如何判断访问用户来自哪个国家地区?
    Windows10锁屏壁纸提取
  • 原文地址:https://www.cnblogs.com/ROOKIEDEBUG/p/11764900.html
Copyright © 2011-2022 走看看