我有两个表,我想从中选择数据:
Document_Data
Document_info
我想执行以下查询:
SELECT DISTINCT Document_Data.DOC_CLASS, TITLE FROM Document_info,Document_Data WHERE (((DOC_STATUS = '1') AND (PORTAL = 'First Page'))) AND (Document_info.DOC_NUMBER = Document_Data.DOC_NUMBER AND Document_info.REVISION = Document_Data.REVISION AND STATUS = 'CURRENT' AND Document_Data.DOC_CLASS = 'MESSAGE')
任何人都可以向我提供有关如何使用Linq执行以下查询的信息吗?
答案 0 :(得分:1)
我做了一些假设,因为你的查询确实没有留下几个表名。我假设STATUS在Document_data表上,而DOC_STATUS在Document_info表上。如果它有任何不同,那么修改这个查询就不难了。
DbContext是您的实体框架上下文或存储数据库集合的任何位置。
dbContext.Document_info.Where(i => i.DOC_STATUS == "1" && i.PORTAL == "First Page")
.Join(dbContext.Document_data.Where(d => d.DOC_CLASS == "MESSAGE" && d.STATUS == "CURRENT"),
i => new { i.REVISION, i.DOC_NUMBER }, //Document_info
d => new { d.REVISION, d.DOC_NUMBER }, //Document_data
(i, d) => new { d.DOC_CLASS, i.TITLE }) //(Document_info, Document_data)
.Distinct()
.ToList();
这样做的方法是首先将document_info表过滤到你想要的那个。然后,它将其与由REVISION
和DOC_NUMBER
组成的复合“密钥”上的已过滤的Document_data表连接起来。之后,它运行Distinct并使用ToList
执行整个查询。
上面应该编译成有效的SQL(至少它会使用MySQL连接器......我没有尝试过类似MSSQL的东西,但我认为既然MSSQL比MySQL更好用,所以它会有意义它也会在那里工作)。但是,这个特定的查询会有点复杂,除非您在REVISION
和DOC_NUMBER
上定义了一些外键,否则可能无法达到最佳效果。
我会注意到,您的查询只返回d.DOC_CLASS == "MESSAGE"
的内容,因此您的结果会非常重复。