如果我正確理解你的問題,我想你想的SQL查詢看起來是這樣的:
SELECT d.DesignGuid
FROM Design AS d
INNER JOIN URL as u ON d.DesignGuid = u.RelationalGuid
WHERE u.UrlString IN ('urlstring1', 'urlstring2', ... ,'urlstringn')
我覺得這樣的事情應該工作:
var localUrlStrings = new List<string>() { "urlString1", "urlString2" }
var result =
from d in Design
from u in URL
where d.DesignGuid == u.RelationalGuid
&& localUrlStrings.Contains(u.UrlString)
select new {
d.DesignGuid,
u.UrlString
});
編輯:您正在尋找這樣的:
SELECT d.DesignGuid, count(u.URL) as numURLs
FROM Design as d,
Url as u
WHERE d.DesignGuid = u.RelationalGuid
HAVING count(u.URL) = 2
我現在不能測試,但我相信這應該做的伎倆(語法可能有點過,我我會在早上仔細檢查一下):
var result =
from d in dataContext.Designs
join u in dataContext.URLs on d.DesignGuid equals u.RelationalGuid into joinTable
from j in joinTable
where localUrlStrings.Contains(j.UrlString)
group j by j.RelationalGuid into groupTable
where groupTable.Count() == localUrlStrings.Count
select groupTable.Key;
這就是我最終使用的,本質上。然而,我正在尋找的是一個查詢,它返回那些完全(在本例中)2個URL的DesignID,其中這兩個URL完全匹配列表中的兩個。這將返回DesignIDs(與其URL匹配),即使其中一個URL與列表中的至少一個urlString匹配。所以,我已經開始使用代碼來進一步縮小列表的範圍,只將它們與count和content完全匹配。我希望能夠在LinqToSql查詢中完成所有操作,而不需要代碼。 – jeromeyers
啊,我明白你在那裏做什麼了!我用(未經測試的)更新的解決方案編輯解決方案.. –
太棒了!我不得不改變一些事情。基本上,你忽略了使用「localUrlStrings」列表。因此,我在group by語句之前添加了「where localUrlStrings.Contains(u.UrlString)」,並用「== localUrlStrings.Count」替換了「> = 2」。而且,當你用「j」分組時,「j」來自Urls表,所以你必須使用「j.RelationalGuid」而不是「j.DesignGuid」。但實質上,你的答案產生了(對於有2個URL的列表),結果是我們以前解決方案的一半(這是預期的,因爲有2個URL)。完善!謝謝! – jeromeyers