2011-05-07 165 views
0

我有一个SQL查询,我想转换为LINQ quyery,PLZ帮助我!将SQL查询转换为Linq查询?

SELECT TOP 10 UPER(C1.NAME) 
FROM CUSTOMER C1 WHERE C1.NAME LIKE 'A%' AND C1.ID NOT IN 
(SELECT TOP 20 C2.ID FROM CUSTOMER C1 WHERE C1.NAME LIKE 'A%' ORDER BY C2.NAME) 
ORDER BY C1.NAME 

UPDATE

SELECT TOP 10 UPPER(C1.NAME) 
FROM CUSTOMER C1 WHERE C1.NAME LIKE 'A%' AND C1.ID NOT IN 
(SELECT TOP 20 C2.ID FROM CUSTOMER C2 WHERE C2.NAME LIKE 'A%' ORDER BY C2.NAME) 
ORDER BY C1.NAME 

DataContext类中声明 “DB”。 对不起,我可怜的英语!

回答

0
var result = (from o in db.Customer 
      where SqlMethods.Like(o.Name, "A%") 
      order by i.Name 
      select o.Name.ToUpper()).Skip(20).Take(10); 

我觉得有更多更好的这样的方式,但是这是我所有的努力......

:d

+0

挂上......“包含”什么?我不认为这会编译。 – 2011-05-07 05:12:44

+0

@JustinMorgan回复更新...谢谢 – 2011-05-07 05:29:36

1

我觉得你有你的答案,所以我想介绍一个有用的为您提供的工具 使您能够将SQL查询转换为LINQ查询。 其LINQPad

那么,你不必! LINQPad允许您使用 现代查询语言:LINQ交互式查询数据库 。亲吻 告别SQL管理工作室!

LINQPad支持一切都在C#4.0 和框架4.0:

LINQ to Objects 
LINQ to SQL and Entity Framework 
LINQ to XML 
Parallel LINQ 
3

对我来说,看起来不是太复杂了,除非我读错了:

var query = from c in db.Customer 
      where c.name.StartsWith("A") 
      orderby c.name 
      select c.name.ToUpper(); 

return query.Skip(20).Take(10).ToList(); 

一很多人似乎将你的SQL直接转换成LINQ,但是看起来他们错过了复合查询的要点(以及你使用相同的ORDER-BY从同一个表中选择的事实)。 Skip方法消除了对C1.ID NOT IN (SELECT TOP 20...部分的需求,因此您可以在一个LINQ查询中完成所有操作。

一个很小的注意事项:如果你的数据库是不区分大小写的(这可能是),你可能需要where c.name.StartsWith("A", StringComparison. OrdinalIgnoreCase)取代where c.name.StartsWith("A")。虽然我不确定,我会先尝试没有StringComparison