0

以下の SQL をラムダ式に転写しようとしていますが、この変換をどのように示すのが最善なのか疑問に思いました。

declare @codigoGrupo int
declare @nomeModelo varchar(20)

set @codigoGrupo = 8 -- null
set @nomeModelo = '%segundo%'

select g.dc_nome, m.dc_nome
from hlp.grupo_solicitacao g
     left join hlp.modelo_solicitacao m on g.codigo_grupo_solicitacao = m.codigo_grupo_solicitacao
     where 1=1
     and (g.codigo_grupo_solicitacao = @codigoGrupo or @codigoGrupo is null)
     and (m.dc_nome like @nomeModelo or @nomeModelo is null)
4

2 に答える 2

1

本当にラムダ式だとおかしいと思います。このようにする方が簡単で、よりクリーンです。

int? codigoGrupo =8;
string nomeModelo="segundo";
var result= (
    from g in grupo_solicitacao
    from m in modelo_solicitacao
         .Where(a=>a.codigo_grupo_solicitacao=g.codigo_grupo_solicitacao)
        .DefaultIfEmpty()
    where 1==1
    && (g.codigo_grupo_solicitacao==codigoGrupo || !codigoGrupo.HasValue)
    && (m.dc_nome.Contains(nomeModelo) || nomeModelo==null)
    select new{g.dc_nome, m.dc_nome}
);
于 2012-05-03T12:41:35.367 に答える
0

このようなもの:

int? codigoGrupo = 8;
string nomeModelo = "segundo"

bool filterCodigoGrupo = codigoGrupo.HasValue;
bool filterNomeModelo = !String.IsNullOrEmpty( filterNomeModelo );

var list = context.grupo_solicitacao
  .Where( o =>
    ( 1 == 1 )
    &&
    ( !filterCodigoGrupo || o.codigo_grupo_solicitacao == codigoGrupo.Value )
    &&
    ( !filterNomeModelo || o.modelo_solicitacao.dc_nome.Contains( nomeModelo ) )
  )
  .Select( o => new { codigo = o.dc_nome, model = o.modelo_solicitacao.dc_nome } )
  .ToList();
于 2012-05-03T12:48:34.783 に答える