【发布时间】:2013-02-06 19:06:52
【问题描述】:
如何将此查询转换为 linq c# 代码:
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
想法是根据可以为 N 的关键字的数量(在示例中为 2:ALFA 和 145)构建动态查询
谢谢
编辑:
关键字广告类别模型:
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 示例。
-
@ɹǝʇǝd 我认为 SQL 也可以重写得更好。然而,这个 SO 问题指出“更清洁”的解决方案性能较差:stackoverflow.com/questions/1054299/…
-
@Peter 我只是用更多信息编辑问题
标签: c# sql asp.net-mvc linq