【发布时间】:2010-10-29 05:25:27
【问题描述】:
我在 SQL Server 中有一个简单的表结构:
一个表存储自行车 (Bikes) 列表,第二个表存储自行车所有者 (Owners) 的历史列表。
使用 Linq 2 SQL,我生成了一个模型,该模型为我提供了一个与“所有者”具有一对多关系的“自行车”实体,称为“HistoricalOwners”。
到目前为止一切都很好......
现在我有很多对当前所有者感兴趣的问题。当前所有者是所有者表中的最新条目。
repo.Bikes().Where(b => b.HistoricalOwners.OrderByDescending(o => o.Date).First().Name == "Joe")
这可行,但有点难看,并没有真正说出我的要求。最好在我的 Bike 实体上创建一个“CurrentOwner”属性并对其进行查询。
public Owner CurrentOwner
{
get
{
return HistoricalOwners.OrderByDescending(o => o.Date).First();
}
}
然后我可以这样查询:
repo.Bikes().Where(b => b.CurrentOwner.Name == "Joe")
这会编译,但在运行时它会失败:
成员“CurrentOwner”没有支持的 SQL 转换。
这完全有道理。
有谁知道我如何能够创建一个 CurrentOwner 以让这个查询工作?
我做了一些研究,让 CurrentOwner 返回一个表达式树而不是一个实例,但我从来没有得到任何我真正满意的地方。
然后我想知道是否可以为 CurrentOwner 添加一个额外的关系到我的 linq 2 sql 存储库并将其限制为一对一。但我似乎无法用 linq 2 sql 做到这一点。我想我可以用 Linq 2 实体做到这一点,但目前这不是一个选项。
有人知道我应该如何完成这项工作吗?
提前致谢,
rmk
【问题讨论】:
标签: .net linq-to-sql lambda iqueryable