从数据库中检索信息只显示一个字段

时间:2015-01-21 22:19:37

标签: c# asp.net sql-server visual-studio

我在从数据库中检索信息时遇到问题。 我有一个功能

public List<string> Selectquery(string sql)
{
   return GetContext().ExecuteQuery<string>(sql).ToList();
}

变量sql:

var sql = "SELECT  s.UserName AS username, st.Name AS status_name, c.FirstName FROM client c JOIN Suser s ON (c.UserID=s.ID) JOIN Status AS st ON (c.StatusID=st.ID) GROUP BY s.UserName,st.Name";

在另一个文件中,我调用函数是这样的:

List<string> SUsers = _DAO.Selectquery(sql);

当我看到带有断点的结果,并以foreach为例:

foreach (string su in SUsers)
{
   String str = su;
}

我只看到用户名,其他字段消失。我更改了IEnumerable的列表,结果是一样的。 所以我不知道发生了什么。 我会感谢你的帮助。 谢谢。

1 个答案:

答案 0 :(得分:2)

创建一个这样的类:

public class clients{
private string username;
public string Username
{
   get
   {
      return username;
   }
   set
   {
      username = value;
   }
}
private string status_name;
public string Status_name
{
   get
   {
      return status_name;
   }
   set
   {
      status_name = value;
   }
}
private string firstName; 
public string FirstName 
{
   get
   {
      return firstName ;
   }
   set
   {
      firstName  = value;
   }
}
}
  

并使用List<clients>为您的方法映射结果。

修改:如果您的查询是动态的,您可以使用C#的dynamic规范:

创建一个像这样的动态实体:

public class DynamicClass : DynamicObject
{
    private IDictionary<string, object> _values;

    public DynamicClass(IDictionary<string, object> values)
    {
        _values = values;
    }
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (_values.ContainsKey(binder.Name))
        {
            result = _values[binder.Name];
            return true;
        }
        result = null;
        return false;
    }
}

你可以像这样在类中构建对象:

var values = new Dictionary<string, object>();
values.Add("Username", "value which you read from database");
values.Add("Status_name", "value which you read from database");
values.Add("FirstName","value which you read from database" );

var client = new DynamicClass(values);

然后您可以轻松访问此类的字段,如:

dynamic clientDyn= client ;
var username= clientDyn.Username;