我有两种尝试在三种类型之间进行多重映射:
INIT:
var users = multi.Read<User>().ToArray();
var uroles = multi.Read<UserRoleRow>().ToArray();
var roles = multi.Read<Role>().ToArray();
首先尝试(成功):
foreach (var u in users)
u.Roles = roles.Where(r => uroles.Any(ur => ur.RoleId == r.RoleId
&& ur.UserId == u.UserId)).AsQueryable();
第二次尝试(错误):
foreach (var u in users)
u.Roles = roles.Where(r => uroles.Contains(new UserRoleRow {
RoleId = r.RoleId,
UserId = u.UserId
})).AsQueryable();
为什么第二次尝试不起作用,哪种更好的做法呢? TY。
答案 0 :(得分:1)
您是否覆盖了UserRoleRow.Equals
方法?
默认情况下,C#只会查看引用是否相等。包含相同数据的对象不必是同一个对象。
例如使用时:
public class Foo {
int bar;
public Foo (int bar) {
this.bar = bar;
}
}
不会满足约束new Foo(2) == new Foo(2)
,但是:
public class Foo {
int bar;
public Foo (int bar) {
this.bar = bar;
}
public override bool Equals (object other) {
return (other is Foo && ((Foo) other).bar == this.bar);
}
}
会做的。