我正试图绕过这个交叉连接(我之前从未见过的东西),以便我可以转换为LINQ。我不确定它想做什么:
Select various a,b,c,d, and e columns
From Fee a
inner Join FeeCategory b on a.CategoryID = b.FeeCategoryID
inner join FeeCompanyType c on a.FeeID = c.FeeID
cross join FeeType e
left outer join FeeTypeLink d on a.FeeID = d.FeeID and e.FeeTypeID = d.FeeTypeID
到
var q = (
from fees in Session.Query<Fee>()
join feeCategories in Session.Query<FeeCategory>() on fees.FeeCategory.Id equals feeCategories.Id
join feeCompanyType in Session.Query<FeeCompanyType>() on fees.Id equals feeCompanyType.Fee.Id
**erm.....**
)
大脑崩溃,任何帮助都赞赏......
答案 0 :(得分:1)
在那里抛出另一个from
,因为从LINQ的角度来看,你并没有真正“加入”这些表。
from fees in Session.Query<Fee>()
join feeCategories in Session.Query<FeeCategory>() on fees.FeeCategory.Id equals feeCategories.Id
join feeCompanyType in Session.Query<FeeCompanyType>() on fees.Id equals feeCompanyType.Fee.Id
from feeType in Session.Query<FeeType>()
select ...
答案 1 :(得分:1)
对于交叉加入,只需添加另一个from
:
from fees in Session.Query<Fee>()
//cross join:
from feetypes in Session.Query<Session.Query<Fee>()
join ...
join ...
// left join:
join feetypelink in Session.Query<FeeTypeLink>() on
new {fees.FeeID,feetypes.FeeTypeID} equals new{feetypelink.FeeID,feetypelink.FeeTypeID}
into gr
from res in gr.DefaultIfEmpty() .....
答案 2 :(得分:1)
原始查询是无意义的,并没有真正进行交叉连接
实际上它等同于
Select various a,b,c,d, and e columns
From Fee a
inner Join FeeCategory b on a.CategoryID = b.FeeCategoryID
inner join FeeCompanyType c on a.FeeID = c.FeeID
left join FeeTypeLink d on a.FeeID = d.FeeID
left join Feetype e ON e.FeeTypeID = d.FeeTypeID
现在您应该可以轻松地将其转换为Linq to SQL。我没有那么多使用,所以会留下其他人填写细节。你不需要任何花哨的东西。
答案 3 :(得分:0)
您可以使用:
from a in ctx.As
join b in ctx.Bs on a.ID equals b.IdOfA //inner join for entities without relationships
join c in ctx.Cs on 1 equals 1 //inner join with constant condition