1

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

问题

为什么我没有得到价值?

4

1 回答 1

2

由于您使用的是 LINQ,因此仅在真正需要结果时才对表达式进行评估。请注意, select 实际上返回一个IEnumerableor 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();
于 2013-10-03T13:45:21.583 回答