SQL语句改为LINQ TO ef
SQL语句改成LINQ TO ef
由于某个delphi程序要用C/S改成B/S,临时抱佛脚,用ASP.NET MVC EF5 C#来做
以前程序都是直接用SQL语句进行查询,现在用EF,单表操作很简单,多表问题来了
一、SQL语句,实际上连接了很多个表和子查询,不过我简化了一下,表达意思就行了
二、我照抄的版主q107770540linq语句并稍做改过,很巧,几年前q107770540解答类似问题时也是使用的同样的数据库
报错:
join 子句中其中一个表达式的类型不正确。对“GroupJoin”的调用中的类型推理失败。
另外,我的乱想,由于刚入门,可能见笑了
对IEnumerable反复查询,连接,可以达到相关效果吗?
虽然,可以用以前的方法,ado.net 循环读取DataReader,生成类再传递 给视图,但总觉得不好
级别不够,份很少,见谅
------解决思路----------------------
cc.TC001与 cd.TD001
cc.TC002与cd.TD002
cc.TC004与ma.MA001
这几个数据类型定义一致吗?
------解决思路----------------------
你可以把SQL语句些到视图里面
然后用LINQ TO EF 直接查询就行了
就跟查询表一样了
------解决思路----------------------
由于某个delphi程序要用C/S改成B/S,临时抱佛脚,用ASP.NET MVC EF5 C#来做
以前程序都是直接用SQL语句进行查询,现在用EF,单表操作很简单,多表问题来了
一、SQL语句,实际上连接了很多个表和子查询,不过我简化了一下,表达意思就行了
SELECT COPMA.MA002 AS 客户简称,COPTC.TC001 AS 订单单别, COPTC.TC002 AS 订单单号,
COPTD.TD003 AS 订单序号,CONVERT(datetime,COPTD.TD013) 交货日,
CONVERT(datetime,COPTC.TC003) AS 订单日期,
COPTD.TD016 订单状态,COPTD.TD004 AS 品号 FROM COPTD
INNER JOIN COPTC ON COPTD.TD001 = COPTC.TC001 AND COPTD.TD002 = COPTC.TC002
left JOIN COPMA ON COPTC.TC004 = COPMA.MA001
WHERE 1=1 and
COPTC.TC003 >='20140701' AND COPTC.TC003 <='20140716'
二、我照抄的版主q107770540linq语句并稍做改过,很巧,几年前q107770540解答类似问题时也是使用的同样的数据库
var query = from cc in erp.COPTC
join cd in erp.COPTD
on new { cc.TC001, cc.TC002 } equals new { cd.TD001, cd.TD002 }
into m
from n in m.DefaultIfEmpty()
join ma in erp.COPMA
on new { cc.TC004 } equals new { ma.MA001}
where
Convert.ToDateTime(cc.TC003) > Convert.ToDateTime("2014-07-01")
&& Convert.ToDateTime(cc.TC003) < Convert.ToDateTime("2014-07-31")
select new
{
cc,
cd
};
报错:
join 子句中其中一个表达式的类型不正确。对“GroupJoin”的调用中的类型推理失败。
另外,我的乱想,由于刚入门,可能见笑了
对IEnumerable反复查询,连接,可以达到相关效果吗?
虽然,可以用以前的方法,ado.net 循环读取DataReader,生成类再传递 给视图,但总觉得不好
级别不够,份很少,见谅
------解决思路----------------------
cc.TC001与 cd.TD001
cc.TC002与cd.TD002
cc.TC004与ma.MA001
这几个数据类型定义一致吗?
------解决思路----------------------
你可以把SQL语句些到视图里面
然后用LINQ TO EF 直接查询就行了
就跟查询表一样了
------解决思路----------------------
var date1 = Convert.ToDateTime("2014-07-01");
var date2 = Convert.ToDateTime("2014-07-31");
var query = from cc in erp.COPTC
join cd in erp.COPTD
on new { cc.TC001, cc.TC002 } equals new { cd.TD001, cd.TD002 }
into m
from n in m.DefaultIfEmpty()
join ma in erp.COPMA
on cc.TC004.Value equals ma.MA001.Value