2011-05-07 500 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