在c#中构建一个Sql查询

时间:2014-01-09 14:50:46

标签: c# sql sql-server

我需要将sql查询传递给c#。

以下是查询:

select 
    T010.A010_nom_ent A010_nom_ent
from
    T010_ENTIDADE T010,
    T016_USUARIO T016
        left outer join
    T307_CELULA_USUARIO T307 ON T307.A306_seq_celula = 0
        and T307.A016_cod_usuario = T016.A016_cod_usuario
where
    T010.A010_cod_entidade = T016.A016_cod_usuario
order by 1

,代码在这里:

public List<Entidade> ListarUsuariosCelula()
    {
        List<Entidade> lstEntidades = null;

        try
        {
            oInvitroEntities = new InvitroEntities();

            lstEntidades = (***here is where i want to put the query***)


            return lstEntidades;
        }
        catch (Exception ex)
        {
            LogErro.Trace(ex);
            throw ex;
        }
        finally
        {
            oInvitroEntities = null;
        }
    }

这是我想要做的一个例子(我将只放一段代码):

try
        {
            oInvitroEntities = new InvitroEntities();

            lstCelula = (from cel in oInvitroEntities.T306_CELULA
                               select new Celula { Codigo = cel.A306_seq_celula, Descricao = cel.A306_dsc_celula }).ToList();


            return lstCelula;
        }

2 个答案:

答案 0 :(得分:2)

您可以使用多行字符串以方便阅读。假设您已经设置了数据库连接和命令对象,则需要执行以下操作来存储查询:

    string query = @"select 
    T010.A010_nom_ent as A010_nom_ent
from
    T010_ENTIDADE T010,
    T016_USUARIO T016
        left outer join
    T307_CELULA_USUARIO T307 ON T307.A306_seq_celula = 0
        T307.A016_cod_usuario = T016.A016_cod_usuario
where
    T010.A010_cod_entidade = T016.A016_cod_usuario
order by 1";

注意,我已更正您的查询:

select 
    T010.A010_nom_ent as A010_nom_ent
from
    T010_ENTIDADE T010,
    T016_USUARIO T016
        left outer join
    T307_CELULA_USUARIO T307 ON T307.A306_seq_celula = 0
        T307.A016_cod_usuario = T016.A016_cod_usuario
where
    T010.A010_cod_entidade = T016.A016_cod_usuario
order by 1

如果要重命名列,请使用as关键字来执行此操作。别名仅用于引用表格。

答案 1 :(得分:1)

似乎可以删除左外连接的部分(它不会更改查询结果)。 所以你的sql查询可以在linq中重新定义到实体(有单个内部连接因为我从你的左外连接下拉了):

oInvitroEntities.T010_ENTIDADE.Join(oInvitroEntities.T016_USUARIO,
                                    t10=>t10.A010_cod_entidade, 
                                    t16=>t16.A016_cod_usuario, 
                                    (t10, t16) => t10.A010_nom_ent);