我在从数据库中检索信息时遇到问题。 我有一个功能
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
的列表,结果是一样的。
所以我不知道发生了什么。
我会感谢你的帮助。
谢谢。
答案 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;