Linq的几个内部联接 [英] Several inner join in Linq
本文介绍了Linq的几个内部联接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个SQL查询,我想用Linq编写我知道我应该使用join但是我很难写如何写这个特别是
Cananybody帮我写这个Linq查询?
I have a SQL query that I want to write in using Linq I know that I should use join but I have difficulty how to write this epecially
Cananybody Help me writing this Linq query?
Quote:
dbo.CT ON dbo。 VE.SM = dbo.CT.Tkt OR dbo.VDA.SMSe = dbo.CT.Tkt INNER JOIN
dbo.CT ON dbo.VE.SM = dbo.CT.Tkt OR dbo.VDA.SMSe = dbo.CT.Tkt INNER JOIN
这是我的SQL查询:< br $>
This is my SQL Query:
SELECT
dbo.VE.X,
dbo.VE.Ope,
dbo.VE.Ac
FROM dbo.VE
INNER JOIN dbo.VDA ON dbo.VE.X = dbo.VDA.X
INNER JOIN dbo.CT ON
dbo.VE.SM = dbo.CT.Tkt OR
dbo.VDA.SMSe = dbo.CT.Tkt
INNER JOIN dbo.LM ON dbo.CT.Mkt = dbo.LM.MarketEsigi
where
dbo.VDA.Time >='' and
dbo.VDA.Time <='' and
dbo.VDA.MCode = ''
推荐答案
您好,您是否在查询中使用了let语句?这应该可以解决问题。让我为你创建一个简单的例子。
这应该是:
Hello, have you used the let statement in the query? This should solve the problem. Let me create simple example for you.
This should be it:
IQueryable<VE> ve = new List<VE>()
{
new VE()
{
Ac = "Ac1",
Ope = "Ope1",
SM = "SM1",
X = "X1"
},
new VE()
{
Ac = "X1",
Ope = "Ope2",
SM = "SM2",
X="X2"
},
new VE()
{
Ac = "X1",
Ope = "Ope2",
SM = "SM2",
X="X2"
},
new VE()
{
Ac = "X1",
Ope = "Ope2",
SM = "SM2",
X="X2"
}
}.AsQueryable();
IQueryable<VDA> vda = new List<VDA>()
{
new VDA()
{
MCode = "MCode1",
SMSe = "SM2",
Time = "Time1",
X="X1"
},
new VDA()
{
MCode = "MCode1",
SMSe = "SMSe1",
Time = "Time2",
X="X2"
}
}.AsQueryable();
IQueryable<CT> ct = new List<CT>()
{
new CT()
{
MCode = "MCode1",
Time = "Time1",
Mkt = "Mkt1",
Tkt = "SM1"
},
new CT()
{
MCode = "MCode1",
Time = "Time2",
Mkt = "Mkt2",
Tkt = "SM2"
},
new CT()
{
MCode = "MCode1",
Time = "Time2",
Mkt = "Mkt2",
Tkt = "SM2"
},
new CT()
{
MCode = "MCode1",
Time = "Time2",
Mkt = "Mkt2",
Tkt = "SM2"
}
}.AsQueryable();
IQueryable<LM> lm = new List<LM>()
{
new LM()
{
MCode = "MCode1",
Time = "Time1",
Mkt = "Mkt1",
MarketEsigi = "Mkt1"
},
new LM()
{
MCode = "MCode1",
Time = "Time2",
Mkt = "Mkt2",
MarketEsigi = "Mkt2"
},
new LM()
{
MCode = "MCode1",
Time = "Time2",
Mkt = "Mkt2",
MarketEsigi = "Mkt2"
},
new LM()
{
MCode = "MCode1",
Time = "Time2",
Mkt = "Mkt2",
MarketEsigi = "Mkt2"
},
new LM()
{
MCode = "MCode1",
Time = "Time2",
Mkt = "Mkt2",
MarketEsigi = "Mkt2"
}
}.AsQueryable();
var queryResult = from v in ve
join vax in vda on v.X equals vax.X
let ccc = ct.FirstOrDefault(c => c.Tkt == v.SM || c.Tkt == vax.SMSe)
join l in lm on ccc.Mkt equals l.MarketEsigi
where vax.Time == "Time2" && vax.MCode == "MCode1"
select v;
int totalSelected = queryResult.Count();
让我知道它是否适合你。
Let me know if it worked for you.
这篇关于Linq的几个内部联接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文