这是我的 linq 代码:
BOOK entity = db.BOOKS
.Where(s => s.ID == (from p in db.LIBRARY
from b in db.BOOKS
where (p.ID == 123) && (p.idpage == b.idpage)
select b.fields));
我的实际 oracle 代码是:
SELECT DISTINCT BOOKS.ID
FROM LIBRARY,BOOKS
WHERE LIBRARY.ID = 123 AND LIBRARY.ID = BOOKS.ID
但是它在 s.ID 中显示错误......
Delegate 'System.Func Project.Models.BOOKS,int,bool' does not take 1 arguments
为什么会这样?有任何解决方法吗?
最佳答案
您的 SQL 使用联接,因此您可以在 LINQ 中执行相同的操作。这些方法中的任何一种都足够了:
// join
var query = (from b in db.BOOKS
join p in db.LIBRARY on b.IdPage equals p.IdPage
where p.ID == 123
select b.Id).Distinct();
// 2 from statements (SelectMany) can also be used as a join
var query = (from b in db.BOOKS
from p in db.LIBRARY
where p.ID == 123 && b.IdPage == p.IdPage
select b.Id).Distinct();
// fluent syntax
var query = db.BOOKS
.Where(b => db.LIBRARY.Any(p =>
p.ID == 123 && b.IdPage == p.IdPage))
.Select(b => b.Id)
.Distinct();
关于c# - 在 Linq 中子查询的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8183769/