linq执行存储过程返回记录集问题
按这个帖子http://www.cnblogs.com/mahong/archive/2008/09/13/1290335.html做的存储过程
==============================
CREATE PROCEDURE wsj_kc
@vsl varchar(200)
AS
declare @sqlstr varchar(1500)
BEGIN
SET NOCOUNT ON;
set @sqlstr='select 品名, 规格, 单位,生产厂家,数量, 进货单价,进货金额, 批号 from ( SELECT I.cInvName AS 品名, I.cInvStd AS 规格,CU_M.cComUnitName AS 单位, i.cEnterprise AS 生产厂家, (cs.iQuantity) as 数量, max(pu_VenInvPriceList.itaxunitprice) as 进货单价, max(cs.iQuantity * pu_VenInvPriceList.itaxunitprice) as 进货金额,cs.cBatch as 批号 FROM V_CurrentStock CS INNER JOIN Inventory I ON I.cInvCode = CS.cInvCode LEFT OUTER JOIN pu_VenInvPriceList ON I.cVenCode = pu_VenInvPriceList.cVenCode AND I.cInvCode = pu_VenInvPriceList.cInvCode LEFT OUTER JOIN Vendor v1 ON CS.cvmivencode = v1.cVenCode LEFT OUTER JOIN InventoryClass IC ON IC.cInvCCode = I.cInvCCode LEFT OUTER JOIN ComputationUnit CU_G ON I.cSTComUnitCode = CU_G.cComunitCode LEFT OUTER JOIN ComputationUnit CU_A ON I.cAssComUnitCode = CU_A.cComunitCode LEFT OUTER JOIN ComputationUnit CU_M ON I.cComUnitCode = CU_M.cComunitCode LEFT OUTER JOIN Warehouse W ON CS.cWhCode = W.cWhCode LEFT OUTER JOIN v_aa_enum E ON E.EnumCode = CONVERT(nchar, CS.cMassUnit) AND E.EnumType = N''ST.MassUnit'' WHERE cs.iQuantity <>0 and ' +@vsl+' group by I.cInvName ,I.cInvStd, CU_M.cComUnitName, I.cEnterprise,CS.iQuantity,CS.cBatch ) ff group by 品名, 规格, 单位,生产厂家,数量,进货单价, 进货金额, 批号 '
exec(@sqlstr)
end
GO
====================
dbml自动生成的方法
[Function(Name="dbo.wsj_kc")]
public ISingleResult<wsj_kcResult> wsj_kc([Parameter(DbType="VarChar(200)")] string vsl)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), vsl);
return ((ISingleResult<wsj_kcResult>)(result.ReturnValue));
}
===============================
dbaccess类
public ISingleResult<wsj_kcResult> selectKc(string vcode, DateTime dt1, DateTime dt2, string invname)
{
List<wsj_kcResult> oKc;
ISingleResult<wsj_kcResult> tmpIS;
IMultipleResults tmpIm;
IEnumerable<wsj_kcResult> tmpIe;
try
{
if (invname == "" || invname == null)
{
tmpIS = objDataContext.wsj_kc("1=1 and i.cVenCode='" + vcode + "'");
}
else
{
tmpIS = objDataContext.wsj_kc("1=1 and i.cVenCode='" + vcode + "'and i.cinvname like '%" + invname + "%' ");
}
//oKc = tmpIS.ToList();
//tmpIe = tmpIm.GetResult<wsj_kcResult>();
//oKc = tmpIm.GetResult<wsj_kcResult>().ToList();
return tmpIS;// oKc;
}
catch (Exception ex)
{
throw ex;
}
}
================================================
控制台调试写的调用
DAKc oDakc = new DAKc("Data Source=192.168.0.242;Initial Catalog=UFDATA_001_2010;User ID=sa;Password=sa");
var ii = oDakc.selectKc("15js00401", new DateTime(),new DateTime(), "");
if (ii.toList()==null)
{
Console.WriteLine("null");
}else{
foreach (wsj_kcResult i in ii)
{
Console.WriteLine("CustID={0}; City={1}", i.进货单价,
i.进货金额);
}
}
执行到 ii.toList()就会报错,或者ii,first()等等方法只要一涉及到ii就会报"指定的转换无效",调试的话提示的是"当从一个数字执行强制转换时,值必须是一个小于无线大的数字.确保源类型可以转换为目标类型
=================================================
请问是不是存储过程执行后没有查到结果,怎么调试和修改? --------------------编程问答-------------------- if (ii == null)
{
Console.WriteLine("null");
}else{
foreach (wsj_kcResult i in ii)
{
Console.WriteLine("CustID={0}; City={1}", i.进货单价,i.进货金额);
}
}
--------------------编程问答-------------------- 之前我就写的ii==null --------------------编程问答-------------------- 没见过这样用linq的。。。
我只知道linq直接操作数据库,
不知道还要调用存储过程。 --------------------编程问答-------------------- 呵呵,是比较生僻 --------------------编程问答-------------------- 竟然没人这么用吗? --------------------编程问答-------------------- 不用等用Linq,早在Linq出现前几年,我就不用存储过程了。 --------------------编程问答-------------------- 我也第一次见这么用,坐等告诉 --------------------编程问答-------------------- 有点乱 --------------------编程问答-------------------- 没人会吗? --------------------编程问答-------------------- csdn这么冷清了; ? --------------------编程问答-------------------- 存储过程执行的结果如果是个临时表的情况,那么linq如何调用啊?顶,求解? --------------------编程问答-------------------- Linq 填充方式是这样的。
IEnumerable<Object> obs = db.ExecuteQuery<Object>(Sql)
sql 语句查询结果集会跟据 Object 中的属性名称进行填充。
如:select '123' as a,'abc' as b,'fbi' as d from tb
则 Object 必需有属性 a,b,d 才可以得到结果。
也就是说你只要声明一个类让其与你想查询的结果集属性相对应就OK了。
补充:.NET技术 , LINQ