2014-01-09 42 views
1

我需要将一个sql查询传递给c#。在c#中建立一个sql查询#

下面是该查询:

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; 
     } 
+0

什么是你的ORM?它是EntityFramework还是别的?你能告诉我们你的映射吗?而你的查询似乎不起作用。 –

+0

它正在工作,我只需要将它传递给C#。其他的事情我要做我知道如何 – user3107374

+1

通常查询被传递到SQL Server而不是其他方式....你的意思_pass一个SQL查询到C#._ – Steve

回答

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关键字来执行此操作。别名仅用于表格。

+2

如果你真的要为了便于阅读,用'@'前缀一个多行字符串可能会更好,有额外的奖励没有实例化一个没有任何东西的对象。 – Vache

+0

感谢您指出这一点。我编辑我的答案使用多行字符串。 –

+0

我的团队中有一条规则,就像我在我的问题 – user3107374

1

这似乎与左外的那部分联接可以删除(它不会改变查询的结果)。 所以,你的SQL查询可以在LINQ可以reqrite到实体(有一个内部联接,因为我DROP掉了你的左外连接):

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