我有 POCO 类映射数据库表: EDITED ------------------------------
class Role { string Id; ConcurrentDictionary<string, User> Users; }
class User { string Id; ConcurrentDictionary<string, Roles> Roles; }
class RoleUser { string Id; string RoleId; string UserId; }
ConcurrentDictionary<string, Role> RolesDict;
ConcurrentDictionary<string, User> UsersDict;
ConcurrentDictionary<string, RoleUser> RoleUserDict;
我正在使用 ServiceStack 中的 ORMLite(它是一些非实体框架 lite ORM),所以它似乎没有到集合的自动关系映射。我制作 Linq 语句来映射Role-RU-User
. 这是Linq:
//cleaning old data
UsersDict.ForEach(kvUser => kvUser.Value.Roles.Clear());
//for each role ...
RolesDict.ForEach(kvRole => {
//cleaning old data
kvRole.Value.Users.Clear();
//find users that belong to the role
var users = (from ru in RoleUserDict
join u in UsersDict on ru.Value.UserId equals u.Value.Id
where ru.Value.RoleId == kvRole.Value.Id
select u).ToList();
//couple them up
users.ForEach(kvUser => {
kvRole.Value.Users.TryAdd(kvUser.Key, kvUser.Value);
kvUser.Value.Roles.TryAdd(kvRole.Key, kvRole.Value);
});
});
我不擅长 Linq,我不确定在这种情况下如何正常处理多对多关系。我的代码对我来说看起来很可怕。特别是对于那些厚实的嵌套 ForEach() 循环。
我的问题是:有没有更好看的代码和更好的性能更优雅的方法?
谢谢 Linq 和 Lambda 专家:D