我有一个包含这两个表的数据库:Customer
and CustomerStatus
. CustomerStatus
是所谓的只读表。对客户状态的所有更改都会导致插入到该表中。当前客户状态可通过以下方式找到CustomerStatus.StatusTimestamp
.
现在我正在寻找一个 LINQ to 实体查询来加载所有客户及其当前状态。就像是
.Include("CustomerStatus.OrderByDescending(StatusTimestamp).FirstOrDefault()")
.
我还没有找到使用 EF 4.0 的正确方法。
我目前的解决方法非常难看,需要两个步骤:
步骤1:加载所有状态的LINQ查询(在业务/数据层):
var r = from c in db.Customers.Include("CustomerStatus")
select c;
步骤 2:在 GUI 中获取每个客户的适当状态(在 MVC3 视图中的循环中):
c.CustomerStatus.OrderByDescending(i => i.StatusTimestamp).FirstOrDefault()
知道如何一步直接完成此操作吗?
EF 比您想象的更强大。它可以做的事情之一就是投影到复杂类型在一个IQueryable
(即,在一个数据库命中)。这应该有效:
var data =
from c in db.Customers
select new {
Customer = c,
LastStatus = c.CustomerStatus // assuming navigation property set up right
.OrderByDescending(s => s.StatusTimestamp)
.FirstOrDefault()
};
Now data
is an IQueryable<anonymous_type>
,并且每个项目都有一个Customer
给予客户的财产,以及LastStatus
给出最新时间戳状态,或者null
如果没有该客户的任何状态记录。
您也可以在这里使用命名类型,这样对我来说输入速度更快:)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)