仍然習慣於使用LINQ語法,並且遇到了需要在LINQ中創建的查詢 - 但並不完全知道如何。將高級查詢從SQL轉換爲LINQ
SELECT *,
(SELECT 1 FROM Applications
WHERE Applications.jID = Jobs.ID
AND Applications.uID = @uID) AS Applied
FROM [Jobs]
打在LinqPad,但界面是不是真的幫助(至少在我所看到的)。
仍然習慣於使用LINQ語法,並且遇到了需要在LINQ中創建的查詢 - 但並不完全知道如何。將高級查詢從SQL轉換爲LINQ
SELECT *,
(SELECT 1 FROM Applications
WHERE Applications.jID = Jobs.ID
AND Applications.uID = @uID) AS Applied
FROM [Jobs]
打在LinqPad,但界面是不是真的幫助(至少在我所看到的)。
基於你一個LEFT OUTER JOIN
後是由保羅·薩西克提供的鏈接,以及他的意見時,該查詢將滿足您的要求;
var query = from job in jobs
join app in applications on job.ID equals app.jID into grouped
from subApp in grouped.DefaultIfEmpty()
select new { Job = job, Applied = (subApp != null) };
EDIT: 要由用戶進行篩選,更新查詢如下;
var query = from job in jobs
join app in
(
from userApp in applications where userApp.uID == uID select userApp
) on job.ID equals app.jID into grouped
from subApp in grouped.DefaultIfEmpty()
select new { Job = job, Applied = (subApp != null) };
我個人會恢復到剛使用。凡()方法是直接在這一點上,但只是覺得應該把一切都保持一致,並繼續使用的查詢語法。
var jobs = from j in this.db.Jobs
where !j.Applications.Any(x => x.UserId == currentUserId)
select j;
我仍然想要顯示用戶尚未申請的作業,因此將額外的列添加到結果集中。 – MetalAdam
本示例執行內部聯接並過濾掉不匹配的記錄。 OP需要來自'Jobs'的所有記錄的標誌值爲與'Applications'連接的標誌值。 –
我的錯誤在於誤解。編輯。 –
我建議檢出工具Linqer - 它將SQL轉換爲Linq代碼。這不是免費的,但有10天的試用期。
你能用我們的英語描述你的查詢的目標嗎? –
當然。它提供了作業列表(來自喬布斯部分的*)。如果當前用戶已應用到作業,則(選擇1 ...)將返回。因此,結果集應該是: [ID],[JobTitle],[Location],[1或null] – MetalAdam
您試圖使用子查詢,但並非真正必要。你可以用左外連接完成你所需要的。看到這裏用LINQ外連接:http://msdn.microsoft.com/en-us/library/bb397895.aspx –