2009-08-27 54 views
0

我有这样的SQL查询我需要一些帮助来写这个LINQ查询

select case when AllowanceId is null then 2 else AllowanceId end as AllowanceId 
    , d.descen as domdescen 
    , t.descen as typdescen 
    , case when qty is null then 0 else qty end as qty 
    , u.descen as unidescen 
from (select t.allowancetypeid, d.allowancedomainid 
     from allowancedomain as d, allowancetype as t 
     where t.allowancetypeid in (1,2) and d.active = 1 and t.active = 1) as a left join 
    allowanceqty as q on a.allowancetypeid = q.allowancetypeid and 
         a.allowancedomainid = q.allowancedomainid and 
         q.allowanceid = 2 inner join 
    allowancedomain as d on a.allowancedomainid = d.allowancedomainid 
    inner join 
    allowancetype as t on a.allowancetypeid = t.allowancetypeid 
    inner join 
    unit as u on case when q.unitid is null then 1 else q.unitid end = u.unitid 

存在这样的查询一个变量,它在SELECT子句(第一行)2号和“= 2 “在FROM子句(中)

我写了我想要的东西,看看下面

回答

0

我的答案很长的try /重试后/尝试/重试这里就是我想....

from a in (from d in AllowanceDomains _ 
     from t in AllowanceTypes _ 
     where (new integer(){1,2}).contains(t.AllowanceTypeID) and t.active = true and d.active=true _ 
     select t.allowancetypeid,tdescen =t.descen, d.allowancedomainid,ddescen=d.descen) _ 
group join qqq in AllowanceQties on new with {.k1 = a.allowancetypeid, .k2 = a.allowancedomainid, .k3 = 2} equals _ 
          new with {.k1 = qqq.allowancetypeid, .k2 = qqq.allowancedomainid, .k3 = qqq.allowanceid} into qq = group _ 
from q in qq.DefaultIfEmpty _ 
join u in units on if(object.equals(q.unitid,nothing),1,q.unitid) equals u.unitid _ 
select AllowanceID =if(object.equals(q.AllowanceID,nothing),2,q.AllowanceID) ,a.tdescen,a.ddescen,qty = if(object.equals(q.qty,nothing),0,q.qty),u.descen 
0

Linqer是你的朋友。 http://www.sqltolinq.com。它允许你将几乎所有的sql转换为linq,并且可以处理你的数据库和dbml。到目前为止,它从未失败过。这不是免费的产品,但非常值得花钱。 [我与Linqer没有任何关联]

+1

你能告诉我linqer会为我的sql查询生成什么吗? – Fredou 2009-08-27 12:45:53