12

私はLINQでこの選択を持っています

 public List<EquipamentoNoDiscovery> GetEquipamentosNoDiscovery(int imID)

var lista = (from ma in ctx.macaddress
                         join m in ctx.mac on
                       ma.address_mac equals m.mac_id into g1
                         from m in g1.DefaultIfEmpty()

                         join ml in ctx.mac_link on
                         m.mac_id equals ml.mac_id into g2
                         from ml in g2.DefaultIfEmpty()

                         join im in ctx.immobile on
                         ml.link_id equals im.immobile_id into g3
                         from im in g3.DefaultIfEmpty()

                         join en in ctx.enterprise on
                          im.enterprise_id equals en.enterprise_id into g4
                         from en in g4.DefaultIfEmpty()

                         join pl in ctx.port_link on
                        ma.address_id equals pl.address_id into g5
                         from pl in g5.DefaultIfEmpty()

                         join p in ctx.port on
                         new { pl.sw_id, pl.port_id } equals new { p.sw_id, p.port_id }

                         join s in ctx.switch_lan on
                        pl.sw_id equals s.sw_id into g6
                         from s in g6.DefaultIfEmpty()
                         where pl.address_id == imID
                         select new
                         {
                             Regiao = en.enterprise_u_name,
                             Predio = im.immobile_u_name,
                             Equipamento = m.host,
                             TipoPlaca = m.mac_type,
                             Mac = ma.address_mac,
                             Ip_ma = ma.address_ip,
                             Ip_m = m.ip_address,
                             Comunidade = s.sw_community,
                             IpSwitch = s.sw_ip,
                             PortaIndex = p.port_index,
                             PortaNome = p.port_name
                         });

            ObjectQuery oQuery = (ObjectQuery)lista;
            string cmdSQL = oQuery.ToTraceString();

コマンドoQuery.ToTraceString()を使用すると、この「where pl.address_id==imID」がこの「WHERE[Extent6]。[address_id]=@p_linq_0」になることがわかります。次に、SQLコマンドで値@p_ linq _0を数値に変更すると、selectは常に空を返します。これは正常に機能します。何か提案をお願いします。ありがとう!

4

1 に答える 1

10

これは、この句に由来する単なるクエリパラメータwhereです。

where pl.address_id == imID

ログには、そのパラメーターに渡された値も表示されます。これは、の値である必要がありますimID。その値を確認してください-期待した値ではない可能性があります。

于 2012-12-03T14:22:16.447 に答える