c# - 在 Linq 中子查询的有效方法

标签 c# database entity-framework-4 linq-to-entities

这是我的 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/

相关文章:

c# - 如何以编程方式突出显示 DateTimePicker 中的特定部分?

c# - 使用 IDispose 关闭非托管资源

c# - 如何通过C#代码在KML中写入引号

c# - 使用参数化查询在使用 OldDb 的 Access 中添加比例为 2 的数字类型的列

c# - 动态 linq 表达式查询,出现问题

c# - 在 UWP 中下载 JSON (C#)

database - 使用地址设计数据库的最佳实践

php - 将无限播放列表(数组)保存到数据库的最佳方法? (php mysql)

entity-framework - Entity Framework 是否将分配的值与原始值进行比较以确定 IsModified 标志?

c# - .NET 4.0 Entity Framework 超时已过期