研究C标签标签程序员。
所以...我有一个奇怪的问题,我什至不知道如何恰当地描述它。让我们开始吧。
我有自己的 Unit 模型:
public class Unit {
public int UnitID { get; set; }
public string Name { get; set; }
public int Version { get; set; }
}
看起来很简单,但是出于各种原因, UnitID 和版本是我的主键。当您编辑单位时,它只会创建具有相同 UnitID 的新版本,但会增加 Version 。例如:
+--------+---------+---------+
| UnitID | Name | Version |
+--------+---------+---------+
| 1 | Unit1 | 1 |
| 1 | Unit1 | 2 |
+--------+---------+---------+
现在是我的模型,它使用 Unit 类:
public class WorkerUnit {
public int WorkerID { get; set; }
public string Worker { get; set; }
public int UnitID { get; set; }
public Unit Unit { get; set; }
}
当我要求工人提供其单位时,我想获得最新版本的单位。像这样的东西。
_context.Workers.SingleOrDefault(w => w.WorkerID == 1).Unit;
我该如何解决?也许我应该在 Unit 模型中添加一些方法,该方法会返回最新的 Unit 。喜欢:
public Unit GetNewestUnitWithThisID() { }
答案 0 :(得分:2)
您的模型不满足您想要实现的目标。目前,仅使用Unit
导航属性无法为工作人员获得单个单位。您需要将其完全删除,但保留UnitID
。现在要获取单元,您需要最大版本号,最简单的方法是订购结果并获取第一个。例如,使用查询语法是因为我发现它使联接看起来更简单:
var query = from unit in _context.Units
join worker in _context.Workers on unit.UnitID equals worked.UnitID
orderby unit.Version descending
select unit;
var unit = query.FirstOrDefault();