简单 Sql 查询转换为 Linq To Sql

Simple Sql query conversion to 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

但我做不到。任何帮助将不胜感激,谢谢。

由于 Linq to SQL 没有您尝试执行的 table 操作的等效项,简短的回答是您不能那样做。

从查询的结构来看,虽然看起来发生了以下情况:

  1. 来自 EFESRDP0 的所有记录都添加到以前不存在的 table temptable

  2. temptable

  3. 中删除了一些列
  4. 剩余数据return编辑为记录集

  5. 临时table被丢弃

从原始 table 到 return 指定列列表的冗长方法,不是吗?糟糕的 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 简单多了,并且似乎在没有所有 table 体操的情况下做基本相同的事情。

由于您的 SQL 语句有效地返回了除 Password 和 SECONDPASS 之外的所有列,您可以使用简单的 Linq 来做到这一点,就像 Corey 提供的创建新的匿名类型一样。您还可以使用除那 2 列之外的所有列定义一个类型,这样您可以获得类型化的结果。即:此示例 returns 只有 3 列来自示例 Northwind..Customers table:

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