Linq的几个内部联接 [英] Several inner join in Linq

查看:64
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆