我有3个表,在用户和类型表之间有一个连接表。
我首先从数据库导入表作为代码,我的上下文很好,DBset,DBSet和
modelBuilder.Entity<User>()
.HasMany(e => e.Type)
.WithMany(e => e.Users)
.Map(m => m.ToTable("UserType").MapLeftKey("ut_use_id").MapRightKey("ut_ut_id"));
但是,我不知道如何用linq检索一个包含3列User.name,User.firstname和Type.type_description == 1的表?
我开始尝试
using (MyContext db = new MyContext())
{
var query = (from u in db.Users....
但是没有表db.UserType?
感谢您的帮助 干杯
答案 0 :(得分:1)
这应该会让您的用户(假设导航属性设置正确,导航属性为UserTypes
):
using (MyContext db=new MyContext)
{
var query=db.Users.Where(u=>u.UserTypes.Any(t=>t.type_description==1));
}
如果您需要UserTypes,那么:
using (MyContext db=new MyContext)
{
var query=db.Users
.Include(u=>u.UserTypes)
.Where(u=>u.UserTypes.Any(t=>t.type_description==1));
}
EF将抽象掉&#34; UserTypes&#34;交叉参考表因为您实际上并不需要它。你应该关心的是与用户相关的类型。事实上,有一个交叉引用表可以帮助您了解SQL如何工作的实现细节。
导航属性可以被称为任何东西,并且与交叉引用表的名称相关性很小。如果交叉引用表被称为UserTypesCrossReferences
,则仍可以将导航属性称为UserTypes
。你碰巧有一个表,默认情况下EF会想要调用导航属性。