【问题标题】:Loading related entities with LINQ使用 LINQ 加载相关实体
【发布时间】:2017-02-08 05:31:18
【问题描述】:

我有以下两个类:

作者类别:

public class Author
{
    public Author()
    {
        this.Books = new List<Book>();
    }
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DOB { get; set; }
    public virtual ICollection<Book> Books { get; set; }
}

还有书类:

public class Book
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime DatePublished { get; set; }
    public bool IsBorrowed { get; set; }
    public bool IsOverdue { get; set; }
    public int AuthorId { get; set; }
    public virtual Author Author { get; set; }
}

一个作者可以有很多本书。我遇到的问题是加载与作者相关的所有书籍。例如,我的数据库中有一个 ID 为 1 的作者,我想返回与该特定作者关联的所有书籍。

我的想法是,最好的方法是使用 LINQ,但是我不知道如何正确创建 LINQ 查询来执行此操作。您能否指导我完成上述任务的最佳方法?

【问题讨论】:

  • db.Authors.Find(1)?.Books
  • var books = context.Books.Where(b =&gt; b.AuthorId == 1); 如果您还想要作者信息:var authorAndBooks = context.Authors.Include(a =&gt; a.Books).FirstOrDefault(a =&gt; a.Id == 1);
  • 您标记了 linq-to-sql 但您的示例类没有
  • @Pleun 他们确实是。我只是省略了不相关的代码以使问题简短直接。如果这造成任何混乱,我们深表歉意。

标签: c# entity-framework linq linq-to-sql loading


【解决方案1】:

看这里https://msdn.microsoft.com/en-us/library/bb397906.aspx.. 这是一个很好的起点。

如果您正在使用实体框架,我会推荐 https://msdn.microsoft.com/en-us/library/bb399375(v=vs.110).aspx

需要先实例化数据库上下文,然后才能用linq访问指定实体

var dbContext = new DataContext();
var query = from book in dbContext.Books
where book.AuthorId == 1
select book;

之后,您可以在 foreach 循环(或类似的)中获取结果或执行方法

.First();

有例外或

.FirstOrDefault();

没有例外。

【讨论】:

  • 很好的答案。参考文献清晰简洁。正是我所追求的。非常感谢。
  • 欢迎您,感谢您的积极反馈 :)
【解决方案2】:

您需要查询 books 表。比如:

IQueryable<Book> books =  
from book in db.Books
where book.AuthorId == 1  
select book; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    相关资源
    最近更新 更多