2012-05-10 40 views
1

我正在努力解決如何將以下腳本從SQL轉換爲LINQ。任何幫助將受到歡迎。使用IN子句將SQL腳本轉換爲LINQ

SELECT * 
FROM 
    [tableName] 
WHERE 
[MyDate] IN 
    (SELECT 
     MAX([MyDate]) 
    FROM 
     [tableName] 
    GROUP BY 
     [MyID]) 

我無法找到的「IN」的條款部分等效。這個論壇上有一些問題,但沒有包括選擇DateTime的問題。

在此先感謝。

回答

0

我覺得Any()是你在找什麼:

var result = tableName.Where(x => 
       (from t in tableName 
       group t by t.MyID into g 
       where g.Max(y => y.MyDate) == x.MyDate 
       select 1).Any()) 
+0

當然Any()只返回true或false,取決於結果是否存在? –

+0

@PaulGrimshaw是的,這有點不對,謝謝。 – Magnus

+0

謝謝你們兩位!得到它的工作! – user1387627

1

您可以使用「.Contains(..)」功能:

var itemQuery = from cartItems in db.SalesOrderDetails 
       where cartItems.SalesOrderID == 75144 
       select cartItems.ProductID; 

var myProducts = from p in db.Products 
       where itemQuery.Contains(p.ProductID) 
       select p; 

雖然它看起來像2個往返,作爲LINQ只有當構建了IEnumerable跳閘,你應該得到合理的性能查詢。

+0

我試圖返回來自所以我不**包含(...)**可用於查詢的所有最大日期在這種情況下。 – user1387627

+0

如果您的第一個查詢獲得最大日期,例如var maxDates = from ...然後你的第二個查詢可以使用WHERE maxDates.Contains(myDate) –

+0

我假設你知道如何在LINQ中進行分組/最大化,因爲你沒有在你的問題中提出這個問題 –