我有以下代码来返回字符串列表。
public List<string> Top5CodesForToday()
{
var date = DateTime.Now;
var resultList = new List<string>();
using (var db = new PillowContext())
{
var qry = (from d in db.DownTimes
where DbFunctions.TruncateTime(d.DateTime) == DbFunctions.TruncateTime(date)
group d by new {d.Code}
into g
let total = g.Sum(x => x.Amount)
orderby total descending
let top5 = g.Take(5).ToList()
select new {g.Key.Code, Total = total});
foreach (var item in qry)
{
int x = item.Code;
var results = from r in db.DownTimeCodes
where r.Code == x
select r.Description;
resultList.Add(results.ToString());
}
}
return resultList;
}
当我查看returnList的内容时,我看到了正确的项目数,但每个项目都是由实际的查询语法组成,而不是数据本身。我以前见过这个并且通常通过执行.ToList()来解决它但是我不确定如何更改我的代码来解决这个问题
答案 0 :(得分:4)
这里的问题是,当您调用ToString
时,查询尚未执行,所以基本上您在ToString
对象上调用IQueryable
,接收查询而不是结果。你需要调用一些东西来执行查询。
您仍然可以致电ToList()
:
var results = (from r in db.DownTimeCodes
where r.Code == x
select r.Description).ToList();
resultList.AddRange(results);
或者,如果您只想要一个结果,请致电FirstOrDefault()
/ SingleOrDefault()
:
var results = (from r in db.DownTimeCodes
where r.Code == x
select r.Description).FirstOrDefault();
resultList.Add(results);
答案 1 :(得分:1)
您正在ToString()
上致电List<>
。作为大多数复杂类型的默认值,它只写出类型名称而不是数据。
这一行
resultList.Add(results.ToString());
应改为
resultList.AddRange(results);