数据库从控制器返回查询而不是值查询

时间:2013-10-03 13:24:47

标签: mysql asp.net-mvc linq-to-sql ef-code-first epplus

Vs'12,asp.net MVC4 Internet Application,EF Code First,MySQL db

概述

我正在尝试使用控制器级别的EPPlus创建报告。 - 用户点击按钮程序到达此处,我需要查询数据库以获取一些信息..

解释

我试过这种方式:其中intPR = 1作为传递的变量

var pro = from p in db.Prospect
        where p.ProspectID == intPR
        select p;
var cty = from c in db.Countys
        from p in db.Prospect
        where p.ProspectID == intPR
        select c;

然后我会用这样的东西把它设置到字段

string x = pro.Select(p => p.ProspectName).ToString();
          ws.Cells["E" + LineFeed].Value = x;

string xx = cty.Select(m => m.County).ToString();
          ws.Cells["E" + LineFeed].Value = xx;

我得到的只是超长查询字符串

"SELECT 
[Extent1]...... You get the hint

问题

为什么我没有获得价值观?

1 个答案:

答案 0 :(得分:2)

由于您正在使用LINQ,因此只有在真正需要结果时才会计算表达式。请注意,select实际上会返回IEnumerableIQueryable。只有在实际上想要使用它执行查询的值时才会这样。默认的ToString()方法只打印查询。

例如,您可以调用ToList()方法以确保查询已被执行:

var prospects = pro.Select(p => p.ProspectName).ToList();

但是,这将返回一个潜在客户列表,在其上调用ToString() - 方法仍将只生成该类型的名称。如果您想要列表中的第一项,您可以执行以下操作:

var firstProspectName = pro.Select(p => p.ProspectName).First():

编辑:您的查询可以更简洁,没有中间步骤:

var firstProspectName = db.Prospect.where(p => p.ProspectID == intPR)
                                   .Select(p => p.ProspectName)
                                   .First();