我怎樣才能改變這種查詢LINQ的C#代碼,所有的記錄:SQL到LINQ拿到賽的所有值
SELECT k1.Ad_Id FROM KeywordAdCategories k1, KeywordAdCategories k2
WHERE k1.Keyword_Id = (SELECT Id FROM keywords WHERE name = 'ALFA')
AND k2.Keyword_Id = (SELECT Id FROM keywords WHERE name = '145')
AND k1.Ad_Id = k2.Ad_Id
的IDEIA是建立基於在可以是N關鍵字的數量動態查詢(在例子中它們是2:ALFA和145)
由於
編輯:
KeywordAdCategory型號:
public class KeywordAdCategory
{
[Key]
[Column("Keyword_Id", Order = 0)]
public int Keyword_Id { get; set; }
[Key]
[Column("Ad_Id", Order = 1)]
public int Ad_Id { get; set; }
[Key]
[Column("Category_Id", Order = 2)]
public int Category_Id { get; set; }
}
關鍵字型號:
public class Keyword
{
// Primary properties
public int Id { get; set; }
public string Name { get; set; }
}
如果我有5個關鍵詞,我會得到:
SELECT k1.Ad_Id FROM KeywordAdCategories k1, KeywordAdCategories k2, KeywordAdCategories k3, KeywordAdCategories k4, KeywordAdCategories k5
WHERE k1.Keyword_Id = (SELECT Id FROM keywords WHERE name = 'KEYWORD1')
AND k2.Keyword_Id = (SELECT Id FROM keywords WHERE name = 'KEYWORD2')
AND k1.Ad_Id = k2.Ad_Id
AND k3.Keyword_Id = (SELECT Id FROM keywords WHERE name = 'KEYWORD3')
AND k2.Ad_Id = k3.Ad_Id
AND k4.Keyword_Id = (SELECT Id FROM keywords WHERE name = 'KEYWORD4')
AND k3.Ad_Id = k4.Ad_Id
AND k5.Keyword_Id = (SELECT Id FROM keywords WHERE name = 'KEYWORD5')
AND k4.Ad_Id = k5.Ad_Id
你的C#類是什麼樣的?另外,如果關鍵字的數量是5,你能給出一個SQL的例子嗎?我不明白爲什麼KeywordAdCategories表格會被使用兩次......可能有更好的方法來編寫這個SQL,這將導致更好的LINQ示例。 – Peter
@ɹǝʇǝd我認爲SQL也可以改寫得更好。然而,這個SO問題指出,「更清潔」的解決方案性能較差:http://stackoverflow.com/questions/1054299/sql-many-to-many-table-and-query –
@Peter我只是編輯問題與更多信息 – Patrick