C#实体框架在联接两个表时

本文关键字:两个 框架 实体 | 更新日期: 2023-09-27 18:00:18

我有一些表,使用实体框架

用户表

  • 用户ID

BookTable

  • BookID
  • BookName

OwnTable

  • 用户ID
  • BookID

现在我可以使用:

uw.ownRepository.GetData().where(v=>v.userid=1).select(o=>o.Book)

得到我所有的书。但是,如果我想得到所有的书,并注意,无论用户是否拥有

我有一些解决方案

1.

选择所有书籍,那么对于每一个选择一次

愚蠢的解决方案="

2.

    var s = from book in uw.bookRepository.GetData()                    
    join own in uw.ownRepository.GetData() on book.Id equals like.Id into ps
    from o in ps.DefaultIfEmpty()
    select new {bookName =book.name,IsOwn =o==null};

只是一些伪代码。

我试过了,效果很好。

但我想知道是否还有更好的解决方案

如果我想选择像这样的强类型

    select new Book{bookName =book.name,bookType=book.bookType, IsOwn =o==null};

在这种情况下,如果我在bookTable中有很多字段,我必须分配每个字段。

有人知道吗?

C#实体框架在联接两个表时

这真的很简单。你想要所有的书,所以你想在书实体上启动你的lambda表达式。在这里的示例中,我选择了一个匿名类型。但是,您可以选择预定义的类型。

Books.GetData().Select(b=> new {name = b.BookName , DoIOwnThisBook = OwnTable.GetData().Where()})