2

我试图了解这个交叉连接(我以前从未见过的东西),以便我可以转换为 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.....**
)

大脑崩溃了,任何帮助表示赞赏......

4

4 回答 4

1

从 LINQ 的角度来看,只需将另一个from放入其中,因为您并没有真正“加入”表格。

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 ...
于 2011-08-30T14:46:52.830 回答
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() .....
于 2011-08-30T14:47:02.070 回答
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。我用的不多,所以让其他人填写细节。不过,你不需要任何花哨的东西。

于 2011-08-30T15:14:42.300 回答
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
于 2011-08-30T14:41:45.283 回答