我有NxN表,想像一下:

User(id,...) Addresses(id,...)

UserAddresses包含用户和地址的FK。
据我所知,由 Entity Framework 用户创建的实体包含UserAddresses的集合。地址包含UserAddresses的集合,而特定的UserAddress包含对User和一个Address的报复。

现在,我要通过linq进行下一个查询。
对于特定的用户ID,仅获取将enable标志设置为true的userAddresses。
对于特定的用户ID,userAddresses可以包含多个条目,但是为此特定用户仅设置了一个。

我可以做的查询是:

context.User.Include( x => x.UserAddresses )
            .Include( x => x.UserAddresses.Select(y => y.Address) )
            .Single( x => x.id == USER_ID )

但我真正想要的是不为该用户加载所有UserAddresses ...仅包含已启用的用户地址,设置为TRUE!

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

最佳答案

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();

这不会加载result.User.UserAddresses,但是result.Addresses将完全具有您想要的内容。

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

关于c# - LINQ到实体包括+ Where方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19386501/

10-11 01:24