简单 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 操作的等效项,简短的回答是您不能那样做。
从查询的结构来看,虽然看起来发生了以下情况:
来自 EFESRDP0
的所有记录都添加到以前不存在的 table temptable
从 temptable
中删除了一些列
剩余数据return编辑为记录集
临时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; }
}
我尝试将这个简单的 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 操作的等效项,简短的回答是您不能那样做。
从查询的结构来看,虽然看起来发生了以下情况:
来自
EFESRDP0
的所有记录都添加到以前不存在的 tabletemptable
从
temptable
中删除了一些列
剩余数据return编辑为记录集
临时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; }
}