实体框架,比较复杂类型

本文关键字:复杂 类型 比较 框架 实体 | 更新日期: 2023-09-27 18:17:35

如何比较查询中的复杂类型?

不工作(总是返回null,编辑:因为新版本的EF会抛出异常):
DbVector3 pos = new DbVector3() { X = 0, Y = 0, Z = 0};
db.PhysObjects.FirstOrDefault(s => s.Position == pos);

:
DbVector3 pos = new DbVector3() { X = 0, Y = 0, Z = 0};
db.PhysObjects.FirstOrDefault(s => s.Position.X == pos.X && s.Position.Y == pos.Y && s.Position.Z == pos.Z);

有没有办法使第一个例子工作?

编辑:对不起,我可能只在标题中提到了这是实体框架。

db是ObjectContext, PhysObjects是ObjectSet<>

实体框架,比较复杂类型

您需要在DbVector类中重写Equals函数,以便在进行比较时使用它来比较两个对象。

protected override bool Equals(object comparer)
{
    DbVector3 compareObj = obj as DbVector3;
    return compareObj.X == this.X && compareObj.Y == this.Y && compareObj.Z == this.Z;
}

也可以对==和!=操作符执行相同的操作。类似如下:

public static bool operator ==(DbVector3 a, DbVector3 b)
{
   return a.X == b.X && a.Y == b.Y && a.Z == b.Z;
}
public static bool operator !=(DbVector3 a, DbVector3 b)
{
   return !(a == b);
}

请阅读MSDN -覆盖指南以获取更多信息

不支持,除非两个值都在数据库中