简单的Sql查询转换为Linq To Sql

时间:2015-07-21 08:45:02

标签: c# sql linq 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将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:3)

由于Linq to SQL与您尝试执行的表格操作没有对应关系,因此简短的回答是您不能这样做。

从查询的结构来看,虽然看起来如下:

  1. EFESRDP0中的所有记录都会添加到之前不存在的表temptable

  2. temptable

  3. 中删除了几列
  4. 其余数据作为记录集

  5. 返回
  6. 删除临时表

  7. 指定从原始表返回的列列表这是一种冗长的方式,不是吗?

    应该修复错误的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简单得多,并且在没有所有桌上体操的情况下基本上做同样的事情。

答案 1 :(得分:0)

由于您的SQL语句有效地返回除Password和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; }
}