从Linq查询返回List <string>返回查询语法而不是值</string>

时间:2014-02-10 11:29:46

标签: c# linq

我有以下代码来返回字符串列表。

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()来解决它但是我不确定如何更改我的代码来解决这个问题

2 个答案:

答案 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);