2015-07-21 68 views
0

我想这个简单sql查询转换为linq to sql查询简单的SQL查询转换为LINQ to SQL的

SELECT * INTO temptable from EFESRDP0 
ALTER TABLE temptable DROP COLUMN PASSWORD,SECONDPASS 
SELECT * FROM temptable 
DROP TABLE temptable 

但我不能。 Anyhelp将不胜感激,谢谢。

+1

使用Linqpad或Linqer工具将sql查询转换为linq。 –

+0

LinqPad将SQL转换为Linq?我不知道。你能告诉如何做到这一点。 –

回答

3

由于Linq to SQL没有与您尝试执行的表操作等效,所以最简单的答案就是您无法做到这一点。

从查询的结构,虽然它看起来像下面发生的事情:

  1. EFESRDP0所有记录被添加到以前不存在的表temptable

  2. 几列被丢弃from temptable

  3. 其余数据作为记录集返回

  4. 临时表被删除

这是指定列的列表,从原来的表中返回的啰嗦了,是不是?坏的SQL不应该变成更糟糕的LINQ,它应该是固定的。

在查询语法,简单的形式是:

var results = 
    from row in context.EFESRDP0 
    select new { row.ID, row.Name, row.LastLoginTime /* or whatever */ }; 

这将导致类似于SQL查询:

SELECT ID, Name, LastLoginTime 
FROM EFESRDP0; 

这是比你张贴,并出现SQL简单一大堆在没有所有桌子体操的情况下做基本相同的事情。

+0

对不起,但你得到了关于查询错误的想法,我摆脱了那个SQL查询某一列,如果有另一种方式做到这一点告诉我请,但据我所知这是唯一的方法来获得摆脱一列而不实际从数据库中删除它。因此,你的提议与我所寻找的有所不同 – BarisY

+0

我认为Corey所说的就是现场。你的SQL语句正如他所说的那样。您所做的只是从EFESRDP0中选择除2之外的所有列。例如,如果你本来有EFESRDP0像列: 字段1,字段2,密码,SECONDPASS 那么你的SQL语句是有效的这样做: 选择场,场2从EFESRDP0 就像科里说。 –

+0

为什么我坚持使用该查询有一个原因,在表efesrdp中总共有15列,因此构建这样的查询是不方便的。这就是我使用这个查询的原因。 **编辑:但我知道没有办法改变它。所以我接受这个答案,谢谢大家的关注。 ** – BarisY

0

由于您的SQL语句有效地返回除密码和SECONDPASS以外的所有列,因此您可以使用像Corey这样的简单Linq创建一个新的匿名类型。您也可以使用除2之外的所有列定义类型,以便获得类型化结果。即:此示例仅返回示例Northwind..Customers表中的3列:

void Main() 
{ 
    DataContext db = new DataContext(@"server=.\SQLexpress;trusted_connection=yes;database=Northwind"); 
    Table<Customer> Customers = db.GetTable<Customer>(); 

    // for LinqPad 
    //Customers.Dump(); 

} 

[Table(Name = "Customers")] 
public class Customer 
{ 
    [Column] 
    public string CustomerID { get; set; } 
    [Column] 
    public string ContactName { get; set; } 
    [Column] 
    public string CompanyName { get; set; } 
}