LINQ To实体包括+ Where方法

ano*_*Neo 15 .net c# linq entity-framework include

我有NxN表,想象一下:

用户(id,...)< - UserAddresses(id,userId,addressId,enabled,...) - >地址(id,...)

UserAddresses包含用户和地址的FK.据我所知,实体框架用户创建的实体包含UserAddresses的集合.地址包含UserAddresses的集合,特定的UserAddress包含对User和一个Address的重新发送.

现在我想通过linq进行下一个查询.对于特定用户标识,仅获取已启用标志设置为true的userAddresses.对于特定用户标识,userAddresses可以包含多个条目,但只为此特定用户设置了一个条目.

我能做的查询是:

context.User.Include( x => x.UserAddresses )
            .Include( x => x.UserAddresses.Select(y => y.Address) )
            .Single( x => x.id == USER_ID )
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是不为该用户加载所有UserAddresses ...只包含启用的那个,设置为TRUE!

有人可以帮我做这个查询吗?

Cha*_*ion 16

EF中没有办法部分加载关联属性.尝试选择匿名类型,只选择您需要的内容:

var result = context.User
   .Where(u => u.Id == userId)
   .Select(u => new {
       Addresses = u.UserAddresses.Select(ua => ua.Address)
            .Where(a => a.Enabled),
       User = u // if you need this as well 
   })
   .Single();
Run Code Online (Sandbox Code Playgroud)

这不会加载result.User.UserAddresses,但result.Addresses将具有您想要的.

如果您确实想要将所有内容作为User类的一部分返回,则需要分离result.User,然后更新result.User.UserAddresses以指向result.Addresses.