在 MVC 3 项目中使用 Linq to Entity(实体框架)。
我的模型:
表 - 用户用户
ID (PK)
...
表 - 客户
ClientID (PK)
表 - PropertyItems
PropertyItemID (PK)
表 - MemberContactPreference(包含用户选择的 PropertyItems - 多对多)
UserID(FK)
PropertyItemID(FK)
表 ClientProperties(包含属于 Clients 的 PropertyItems - 多对多)
ClientID (FK)
PropertyItemID (FK)
我想列出所有选择了客户选择的所有属性的不同用户。
我的方法:
我得到了一个特定客户的所有属性的列表
Iqueryable<ClientProperty> clientProperties = GetClientProperties(ClientID)
Iqueryable<User> UsersMatchingClientProperties = GetAllUsers();
foreach (ClientProperty property in clientproperties)
{
UsersMatchingClientProperties = (from uem in UsersMatchingClientProperties
join ucp in GetAllMemberContactPreferences on
ucp.UserID == uem.UserID
where uem.MemberContactPreferences.SelectMany(
mcp => mcp.PropertyItemID == property.PropertyItemID)
select uem).Distinct;
}
它只第一次给出正确的结果。因为它不会在每次迭代时减少 UsersMatchingClientProperties 中的项目数。实际上它用新的结果集替换了集合。我想在每次迭代中过滤掉这个集合。
此外,在不使用 Linq 的情况下在 Lambda 表达式中执行此操作的任何建议。
谢谢