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中有很多字段,我必须分配每个字段。
有人知道吗?
这真的很简单。你想要所有的书,所以你想在书实体上启动你的lambda表达式。在这里的示例中,我选择了一个匿名类型。但是,您可以选择预定义的类型。
Books.GetData().Select(b=> new {name = b.BookName , DoIOwnThisBook = OwnTable.GetData().Where()})