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
问题
为什么我没有获得价值观?
答案 0 :(得分:2)
由于您正在使用LINQ,因此只有在真正需要结果时才会计算表达式。请注意,select实际上会返回IEnumerable
或IQueryable
。只有在实际上想要使用它执行查询的值时才会这样。默认的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();