多映射:结果不一样

时间:2014-03-05 20:59:58

标签: c# .net

我有两种尝试在三种类型之间进行多重映射:

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。

1 个答案:

答案 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);
   }


}

会做的。