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

本文关键字:Sql Linq to 查询 简单 转换 | 更新日期: 2023-09-27 18:03:39

我试图将这个简单的sql查询转换为linq to sql查询

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

但是我不能。

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

由于Linq to SQL对于您尝试执行的表操作没有等效的,因此简短的答案是您不能这样做。

从查询的结构来看,似乎发生了以下事情:

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

  2. 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简单得多,似乎做基本相同的事情没有所有的表体操。

由于您的SQL语句有效地返回除Password和SECONDPASS之外的所有列,因此您可以使用Corey给出的创建新匿名类型的简单Linq来实现这一点。您还可以使用除这两列之外的所有列定义类型,以便获得类型化的结果。例如:此示例仅返回来自示例Northwind的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; }
}