将SQL查询转换为Linq查询?

时间:2011-05-07 04:11:30

标签: sql linq linq-to-sql

我有一个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

更新

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”。 抱歉我的英语很差!

3 个答案:

答案 0 :(得分: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")替换为where c.name.StartsWith("A", StringComparison. OrdinalIgnoreCase)。不过,我不确定。我先尝试没有StringComparison

答案 1 :(得分:1)

我认为你得到了答案,所以我想为你介绍一些有用的工具 使您能够将SQL查询转换为LINQ查询。 它的LINQPad

  

嗯,你不必! LINQPad让   你以交互方式查询数据库   现代查询语言:LINQ。吻   告别SQL Management Studio!

     

LINQPad支持C#4.0中的所有内容   和Framework 4.0:

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

答案 2 :(得分: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