简单的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
但是我不能。
由于Linq to SQL对于您尝试执行的表操作没有等效的,因此简短的答案是您不能这样做。
从查询的结构来看,似乎发生了以下事情:
-
EFESRDP0
的所有记录被添加到之前不存在的表temptable
-
从
temptable
中删除一些列 -
剩余数据作为记录集返回
-
临时表被删除
这是一种冗长的方式来指定从原始表返回的列列表,不是吗?糟糕的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; }
}