【发布时间】:2015-05-22 12:10:43
【问题描述】:
我有 3 张桌子,Person | Book | PersonBookPersonBook 表是Person 和Book 之间的关系表
Person Book PersonBooks
Id Name Id Name Id PersonId BookId
1 rick 1 SQL 1 1 1
2 phil 2 Asp.Net 2 1 3
3 scott 3 MySql 3 2 4
4 C# 4 3 2
5 3 3
6 3 4
我想得到阅读书籍 id 2、3、4 的人。因此结果应该是 3。
我试过什么
我设法编写 sql 查询来获得结果。但我想要 Linq 查询这个。
我的sql查询是
SELECT DISTINCT(PersonId) From PersonBooks
WHERE BookId IN (2, 3, 4)
GROUP BY PersonId
HAVING COUNT (*) = 3
sql 查询如果工作正常。但我想为此使用 linq 查询。任何帮助都会被应用
更新
这个查询对我有用,但我认为它没有经过优化。谁能帮我优化这个查询。
from p in Context.Book where (Context.PersonBooks.Where(x => personIds.Contains(x.PersonId))
.GroupBy(x => x.BookId)
.Where(x=>x.Count() == personIds.Count)
.OrderByDescending(x => x.Count())
.Select(x => x.Key).ToList()).Contains(p.BookId) select p;
【问题讨论】:
-
我不认为你的查询工作正常,你需要 FROM 而你不需要 Distinct。
-
@Tim3880 抱歉拼写错误:)
-
@Tim3880 实际上我需要不同的,这不是原始表,只是演示数据没有不同的我得到错误。原始表还包含许多其他列。
标签: c# sql-server linq many-to-many entity-framework-6